High density two-dimensional bar code symbol

ABSTRACT

A nonvolatile electro-optical read-only memory includes a substrate on which is printed (or otherwise inscribed) a complex symbol or &#34;label&#34; with a high density two-dimensional symbology, a variable number of component symbols or &#34;codewords&#34; per row, and a variable number of rows. Codewords in alternating rows are selected from mutually exclusive subsets of a mark pattern such as a (17,4) mark pattern. The subsets are defined in terms of particular values of a discriminator function, which is illustrated as being a function of the widths of bars and spaces in a given codeword. In the illustrated embodiment, each subset includes 929 available codewords; that, plus a two-step method of decoding scanned data, permitting significant flexibility in defining mappings of human-readable symbol sets into codewords. The memory may be used in conjunction with a scanner and a suitable control system in a number of applications, e.g., robotic operations or automated microfilm searching.

BACKGROUND OF THE INVENTION

The present invention relates to a high density, two-dimensional barcode symbol, comprising a substrate on which is printed (or otherwiseinscribed) a complex symbol or "label" with a high densitytwo-dimensional symbology, a variable number of component symbols or"codewords" per line, and a variable number of lines.

Bar Code Symbology

A bar code is typically a linear array of elements that are eitherprinted directly on an object or on labels that are affixed to theobject. As shown in FIGS. 1 and 2, bar code elements typically comprisebars and spaces, with bars of varying widths representing strings ofbinary ones and spaces of varying widths representing strings of binaryzeros. Many bar codes are optically detectable and are read by devicessuch as scanning laser beams or handheld wands. Other bar codes areimplemented in magnetic media. The readers and scanning systemselectro-optically decode the symbol to multiple alphanumericalcharacters that are intended to be descriptive of the article or somecharacteristic thereof. Such characters are typically represented indigital form as an input to a data processing system for applications inpoint-of-sale processing, inventory control, and the like. Scanningsystems of this general type have been disclosed, for example, in U.S.Pat. Nos. 4,251,798; 4,360,798; 4,369,361; 4,387,297; 4,409,470 and4,460,120, all of which have been assigned to the same assignee as theinstant application.

Most bar codes presently used contain only five or six letters ordigits, no more than a typical vehicle license plate. In view of therelatively small amount of data contained in a typical linear bar code,the most typical applications of a bar code are to use the encoded datamerely as an index to a file or data base associated with the computersystem where comprehensive information is available.

As noted above, the contrasting parallel bars and spaces (referred toherein as "marks") of typical optically-detectable bar codes havevarying widths. Generally, the bars and spaces can be no smaller than aspecified minimum width, termed the code's "unit" (or "x dimension" or"module"). While the theoretical minimum unit size is the wavelength ofthe light being used to read the bar code, other practical limitationsexist. Among these limitations are the desired depth of field of thereading equipment, the limitations of a given printing process, and therobustness of the printed image to be correctly read despite dust, dirt,and minor physical damage.

The bar code symbols are formed from bars or elements typicallyrectangular in shape with a variety of possible widths. The specificarrangement of elements defines the character represented according to aset of rules and definitions specified by the code or "symbology" used.The relative size of the bars and spaces is determined by the type ofcoding used, as is the actual size of the bars and spaces. The number ofcharacters per inch represented by the bar symbol is referred to as thedensity of the symbol. To encode a desired sequence of characters, acollection of element arrangements are concatenated together to form thecomplete bar code symbol, with each character of the message beingrepresented by its own corresponding group of elements. In somesymbologies a unique "start" and "stop" character is used to indicatewhere the bar code begins and ends. A number of different bar codesymbologies exist. These symbologies include UPS/EAN, Code 39, Code 93,Code 128, Codabar, and Interleaved 2 of 5.

Symbologies of (n,k) Type

Some bar codes are referred to as belonging to the (n,k) family definedby Savir and Laurer in "The Characteristics and Decodeability of theUniversal Product Code," IBM Systems Journal, Vol. 14, No. 1, 1975. Acode of the (n,k) type represents characters uniquely by a string of nbits each containing k runs of one bit (i.e., k bars) and k runs of zerobits (i.e., k spaces). An (n,k) code is decodable in both directions,i.e., by scanning it either forwards or backwards. Such bar codes areoften referred to by the numbers n and k; for example, the well-knownCode 93 derives its name from this (n,k) notation, i.e., n=9 and k=3.The UPC code is an example of a (7,2) code, i.e., n=7 and k=2.

Prior Two-Dimensional Bar Codes

Known two-dimensional bar codes exist that are extensions ofone-dimensional bar codes, in that one-dimensional bar codes are stackedwith horizontal guard bars between them to increase the density. Anexample of such bar codes is seen in U.S. Pat. No. 4,794,239, to Allais.

An obstacle to increasing the density of two-dimensional bar codes isthe need for a certain minimum height in the vertical direction. Aminimum height is needed to ensure that a human operator can keep a"scan line" (i.e., the path of a given scanning motion, such as thatachieved by passing a hand-held wand across a bar code) within the areaof a single bar-code row. FIG. 1 illustrates this difficulty: scan lines10, 11, and 12 represent identical exemplar paths of, e.g., hand-heldwands over the bar codes 15, 16, and 17. It will be seen that with atall bar code 15, the scan lines 10 all stay within the confines of onebar code row, whereas with shorter bar codes 16 or 17, the scan lines 11and 12 cross from one row to another.

Another limitation seen in some known two-dimensional bar codes is theuse of fixed maps to translate from codewords to characters. The fixedmaps restrict the flexibility of applications. For example, thewell-known Code 49 has six fixed maps (i.e., six modes) to translate acodeword numerically or alphanumerically.

Although such two-dimensional bar codes provide some increase in thestorage capacity, such codes are still used as indices for file look-up,rather than as a complete data file in itself.

Still another drawback of some known two-dimensional codes is the needfor a fixed number of codewords per line (referred to here as a "row")and the limitation of a maximum number of rows. For instance, Code 49 (abar code generally in accordance with the aforementioned Allais '239patent) has 4 codewords per row and 8 rows maximum.

Yet another problem is the lack of flexibility in choosing a suitablesecurity system. (The term "security" is commonly used to refer toconfidence in accuracy or correctness; it is usually specified by amisdecode rate, e.g., in errors per million). Code 49, for example,provides a very high level of security while sacrificing about 30% ofits codewords on average for checking errors. In some applications,however, a lesser degree of security may be an acceptable trade-off inreturn for a greater codeword density; the ability to vary the securitywould be advantageous.

SUMMARY OF THE INVENTION

The present invention provides an improved high-density two-dimensionalsymbology, as well as a flexible method for using the symbology toencode and decode data. The symbology may be used to create a highdensity, two-dimensional bar code symbol, which in turn may be used in acomputer system.

Prior codes have been restricted in terms of information capacity ordensity. The present invention achieves storage capacity of up to 1kilobytes of memory within an area of one to four square inches. Thesignificance of such a memory should not be underestimated--itrepresents about 250 English words, about the size of a page or screendisplay. As an information unit, such unit is most suitable for manyapplications.

Summary of Label Row-Wise Organization

A two-dimensional label in accordance with the invention comprisesmultiple rows of codewords; that is, the term "label" is used here tomean a complex marking of specified dimensions that includes a number ofcodewords organized in rows. Each codeword is a mark pattern comprisinga plurality of elements or marks; the marks can be of various heights,as in a bar code, or can be of a relatively small height to form a "dotcode." Not just any mark pattern can constitute a codeword, however;each codeword belongs to a specific family or "set" of mark patternsthat conforms to a particular descriptive rule about some characteristicof each mark pattern, e.g., a rule about the width of each mark and thetotal width of each mark pattern.

The codewords in any two adjacent rows are written in mutually exclusivesubsets of the mark-pattern set (although in some embodiments the unionof the subsets is not exhaustive of the set itself). In particular, eachsubset of the mark-pattern set is defined so that it includes, as validcodewords for that subset, only those mark patterns that satisfy certaindiscriminator-function criteria.

Such rowwise usage of alternating subsets of codewords, groupedaccording to discriminator-function criteria, permits quickdetermination whether a row has been crossed, without the need for ahorizontal guard bar. That is, for a given scanned codeword in a label,determination of the discriminator function indicates whether thecodeword comes from the same row as the previously-scanned codeword orfrom a different row (that is, whether the scan line has crossed betweenrows as illustrated in FIG. 1).

Detection of line-crossing permits "stitching" of partial scans ofparticular rows into a map (e.g., in memory) of the label. The stitchingprocess is roughly analogous to stitching a number of pieces of coloredfabric into a pre-designed quilt that displays, e.g., a picture: as each"piece" is acquired by the scanning process, it is incorporatedpiecewise into the appropriate point in the label.

For example, suppose that computation of the appropriate discriminatorfunctions reveals that a scanning pass has scanned the first half of row1 and the second half of row 2 of a label such as is shown in FIG. 3.Assume that the respective longitudes of the scanned data with respectto the ends of the label are known, e.g., through detection of start-and/or stop-codes. The knowledge that a row boundary has been crossedpermits all the scanned data from the scanning pass to be incorporatedinto the respective proper rows of the label map at the respectiveproper longitudes (assuming no scanning or decoding errors); the datafrom the scanning pass need not be discarded merely because the data didnot all come from a single desired row.

As another (greatly simplified) hypothetical example, assume that a partof one row has been scanned and that the data "123456789" areincorporated into the label map as a result. Further assume that asecond scanning pass of that row is made, and that the data "6789ABCD"are decoded as a result. If the overlapping portion if any between thetwo scanned data "pieces"--in this case, the "6789" portion--can bedetermined (e.g., with string-matching techniques such as describedbelow), then the remainder of the later-scanned data can beappropriately incorporated into the label map (in this case, the "ABCD"portion).

Consequently, the operator need not be scrupulously careful to sweep thewand over the label one row at a time; virtually any scanning pass thatincludes either a row's start code or a stop code, or that can somehowbe determined to overlap with data already incorporated in the labelmap, will yield useable data (assuming no coding or decoding errors). Alabel in accordance with the invention thus advantageously increases thedensity of information by permitting height reductions in the codewords.

Summary of Organization of Codeword Subsets

As noted above, a key feature of the invention is the use of differentcodeword subsets in different rows, each subset satisfying certaindiscriminator-function criteria. In one embodiment described here forillustrative purposes, a (17,4) symbology is used. A discriminatorfunction is used to divide the 11,400 available mark patterns in thatsymbology into three mark-pattern subsets of 929 codewords each.

The discriminator function may take as its inputs the various widths ofthe on- and off marks of a mark pattern (e.g., optically detectable barsand spaces) and may provide as an output a number from 0 to 8. Threesubsets may then be selected whose discriminator function values are 0,3, and 6, respectively, and whose mark widths meet certain othercriteria. Each subset thus comprises a collection of codewords, all ofwhose discriminator functions are both equal to each other and readilydistinguishable from those of the codewords in the other two subsets.

The availability of 929 codewords in each subset, each with a uniquediscriminatory-function number, permits each codeword to be used torepresent a two-digit number in base 30. This capability leads toseveral advantages.

As shown in FIG. 5, each digit of the two-digit base-30 number can beused in an "alpha mode" or in a "mixed mode"; that is, each digit can bemapped into a 30-place alphabetic translation table or into a 30-placemixed alphanumeric translation table. In each of these 30-place tables,one or more digits are reserved for use as signals to change translationtables.

Alternatively, each two-digit number can be used in a "numeric mode" orin a "user mode"; that is, each number can be mapped into a 929-placenumeric translation table or into any of up to twenty-seven 929-placeuser-defined translation tables. In each of these tables as well, one ormore digits are reserved for use as signals to begin using a differenttranslation table.

Summary of Two-Step Decoding Method

The decoding method of the invention advantageously makes use of thesymbology organization of the invention. In the first step, when acodeword is scanned, the discriminator function of the scanned codewordis computed to determine the codeword subset of which the scannedcodeword is a member. A t-sequence number based on the width of themarks comprising the codeword is also computed; that number is used asan entry point into a lookup table for the codeword subset in question.The lookup table yields a number from 0 to 928, which is parsed into atwo-digit number in base 30.

In the second step, the high- and low-order digits of the base-30 numberare used to determine the symbolic meaning assigned to the codeword(which may include an instruction to change translation tables).

The method of the invention thus advantageously permits the user todefine multiple translation tables. In addition, the invention is notconstrained by logical limits on the number of codewords per row nor onthe number of rows. This gives the user freedom to lay out the symbologyin areas of varying shapes.

Summary of Error Detection and Correction

A row-oriented incremental error detection capability is providedthrough the use of a checksum codeword for each row. After completion oflow-level decoding but before performance of high-level decoding,various checksum computations are performed to test the accuracy of thescan.

In addition, a "final" checksum codeword for the label as a whole isused for additional security. The use of these checksums permits alimited degree of error recovery, since the check-sums reflect theinformation contents of each of the codewords in the label. That is,errors in decoding particular codewords can be corrected in somecircumstances by "subtracting" the known correct codewords from thechecksum, so to speak, thereby yielding the correct value for theerroneously decoded codeword.

If the test results are satisfactory, the high-level decoding step isperformed.

Summary of System Implementation

Another feature of the present invention is to provide a system forreading bar code symbols or the like, including a hand-held scanningunit in a lightweight, portable housing including a symbol-detectiondevice for generating a laser beam directed toward a symbol to be read,and for receiving reflected light from such symbol to produce electricalsignals corresponding to data represented by the symbol; a dataprocessing device for processing the data represented by the symbolhaving a state according to at least first and second different codingprocedures; and a read-control device to actuate the symbol-detectiondevice to initiate reading of a symbol; wherein the symbol includes atleast two groups of codewords; each codeword representing at least oneinformation-bearing character and being selected from among a set ofvalid mark patterns. Each mark pattern comprises a pattern of marks,each mark pattern being representative of encoded data according to oneof a plurality of different coding procedures; the codewords in eachgroup being selected from a subset for said group being defined by aspecified rule for that group that differs from the rule specified forsaid different group; each coding procedure being a function of thestate of the data processing device.

BRIEF DESCRIPTION OF THE DRAWINGS

FIGS. 1A-1B are illustrations of prior-art bar code symbology.

FIG. 1C is an illustration of a label in accordance with the presentinvention.

FIG. 2 is an illustration of the relationship between an x-sequence anda t-sequence in a codeword comprising part of a label embodying thepresent invention.

FIG. 3 is an exemplar layout of an illustrative high densitytwo-dimensional symbology design in accordance with the invention.

FIG. 4 is a block-diagram illustration of the use of alternatesub-symbologies in different rows of a multi-row label in accordancewith the invention.

FIG. 5 is a table showing alternate translation modes for encoding ordecoding codewords.

FIG. 6 is a state-machine diagram of aspects of a method for using thetable shown in FIG. 5.

FIG. 7 is a pictorial representation of a sequence of encoding a stringof readable characters into scannable codewords.

FIG. 8 is a logic diagram of an illustrative circuit for computing achecksum for a row in a label embodying the invention;

FIG. 9 shows a similar circuit for computing an additional checksum forthe entire label.

FIG. 10 is a schematic illustration of the layout of codewords within alabel.

FIGS. 11 through 13 are logic diagrams of illustrative circuits forperforming error recovery in accordance with the invention.

FIGS. 14A through 14D, FIGS. 15A through 15D, and FIGS. 16A through 16Ddepict tables used for decoding codewords in three differentsub-symbologies. FIGS. 17A-C show a C-language program that may be usedto generate these tables.

FIG. 18 is a block diagram of a computer system using a high density,two-dimensional bar code symbol in accordance with the invention.

FIGS. 19a, 19b, 19c, and 19d depict alternative type of laser scanningpattern that may be used in connection with the present invention;

FIG. 20 shows an alternative arrangement of a bar code symbol;

FIG. 21 shows a cross-sectional view of an implementation of a hand-heldlaser scanner which may be used to implement the present invention.

DETAILED DESCRIPTION OF SPECIFIC EMBODIMENTS Stitching of Partial Scans

The label of the invention proves especially useful for stitchingtogether of partial scans. As noted above (and referring to FIG. 1),when scan lines 12 cross codeword rows in a label 17, the partial scansmust be "stitched" or pieced together. For example, consider a retailstore checkout counter where a sales clerk manually passes a hand-heldwand over a multirow label. If the wand's travel does not runsubstantially parallel to the label, the scan line may pass from one rowto another; parts of different rows are thus scanned, but neither row isscanned completely.

Stitching entails building a map of each row of the label (e.g. inmemory); successive passes of the wand result in a greater degree offilling in the map. It can be accomplished by using known stringmatching algorithms, such as disclosed in D. Sankoff and J. B. Kruskal,editors, Time Warps, String Edits, and Macro-molecules: The Theory andPractice of Sequence Comparison, Addison-Wesley, Reading, Mass., 1983.One such algorithm is described below.

Partitioned Symbology

Stitching is facilitated by using different sub-symbologies in alternaterows, selected so that the scanner can make a local decision on whethera row has been crossed. Using different sub-symbologies in alternaterows allows the elimination of horizontal guard bars seen in prior-artcode symbologies, thus permitting higher density of information.

The illustrative embodiment of the present invention utilizes anadvantageous scheme for organizing codewords into readilydistinguishable groups. The scheme makes use of the principle of codingtheorem to pick only a fraction of available mark patterns as legal codewords to increase decoding reliability; it can be applied to any of anumber of labels.

One such label, referred to here as a "PDF417" label (for "Portable DataFile 417"), is described as an illustration of this invention. PDF417 isa (17,4) label of the (n,k) type described above. Each codeword has 4bars and 4 spaces with a total width of 17 modules.

It can be shown that this code yields a set of 11,440 differentcombinations of mark patterns. To increase decoding reliability, only afraction of these available mark patterns are used as valid codewords.

Discriminator Function for Defining Subset Partition

As a first step in selecting a group of mark patterns for such use forthis particular code, the 11,440 mark patterns are partitioned into ninesubsets or "clusters," by calculating a discriminator function f(X) foreach mark pattern X:

    f(X)=(x.sub.1 -x.sub.3 +x.sub.5 -x.sub.7) mod 9

where x₁, x₃, x₅ and x₇ stand for the bars' widths, and x₂, x₄, x₆ andx₈ stand for the spaces' widths. The discriminator function f(X) aboveis one of possible alternative equations used to subdivide the differentpossible combinations into nine different subsets.

Further narrowing is performed on three of the nine subsets of markpatterns, namely the subsets in which f(X)=0, f(X)=3, and f(x)=6(sometimes called cluster(0) cluster (3) and cluster(6), respectively).The narrowing is performed in part by defining a "t-sequence" for eachmark pattern. Each element t_(k) of the t-sequence is computed accordingto the formula:

    t.sub.k =x.sub.k +x.sub.k+1, where k=1, . . . , 7

The three subsets cluster(i) (where i=0, 3, 6) are narrowed by selectingmark patterns where no mark width x_(j) is more than six (where j=1, . .. , 7), and where no t_(k) is more than nine (where k=1, . . . , 8).

Thus, the three final subsets cluster(i) of the mark patterns X that areselected for use as code words can be summarized as follows:

    cluster(i)={X:f(X)=i, x.sub.j ≦6, t.sub.k ≦9}

where i=0, 3, 6, j=1, . . . , 8, and k=1, . . . , 7. After sorting eachcluster by the t-sequence while suppressing duplicate entries, it can beshown that each cluster(i) includes at least 934 mark patterns. Theclosest prime number to 934 is 929; accordingly, 929 mark patterns areselected from each cluster(i) for use as codewords. (For convenience,the term "x-sequence," with respect to any given mark pattern, isdefined as the number having as its digits x₁ x₂. . . x₈.)

The t-sequence of each codeword can be used to identify that codeword,since it can be shown that each such t-sequence is unique within thethree subsets cluster(i). It will be apparent that only the first sixdigits of the seven-digit t-sequence need be used to uniquely specify acodeword of the (17, 4) type, since as illustrated in FIG. 2, the valueof the final t-sequence element t₇ is completely determined by the firstsix elements t_(i) and the fixed total width Σx_(j) of the mark pattern.As an example, suppose that t₁ =2, t₂ =4, t₃ =6, t₄ =7, t₅ =6, and t₆=4; the t-sequence for that codeword would be 246764.

The partition just described has the advantage that, by computing f(X)for any scanned mark pattern, the mark pattern's membership (ornonmembership) in a codeword subset can quickly be ascertained.Furthermore, since the t-sequence for each codeword is unique,computation of the t-sequence permits that value to be used in a lookuptable to determine the symbolic meaning assigned to a scanned markpattern that belongs to a codeword subset.

Other equivalent discriminator functions f(X) may be constructed andused. Preferably, such a discriminator function should partition theavailable mark patterns into clusters (not necessarily nine clusters)approximately uniform in size. In addition, the clusters selected foruse as codewords preferably are equidistant in "error distance"; thatis, the probability that a codeword from any of selected clusters A, B,C, etc., will be mistaken for a codeword from another one of thoseclusters should be of the same order of magnitude regardless of which ofthe other clusters is considered.

Generating Subsets of Codewords

An example of a computer program for generating lists of codewords forthe various clusters(i) is set forth in FIG. 17. The example program iswritten for convenience in the well-known C programming language,although any suitable language may be used; the example program is usedgenerally as follows:

1. The program of FIG. 17 is used to generate 9 output files, referredto here as out(i), where i=0, . . . , 8. Only the output files out(0),out(3), and out(6) are used; they may be renamed as "cluster" filescluster(0), cluster(3), and cluster(6), respectively.

2. All three cluster files are conventionally sorted to remove ambiguousentries, i.e., to eliminate any mark pattern whose t-sequence isidentical to the t-sequence of any other mark pattern.

3. The cluster files cluster(3) and cluster(6) are conventionallyfiltered to remove those entries in which any t_(k) is wider than 9.

4. In the cluster file cluster(0), those odd entries (i.e., the firstentry, third entry, etc.) in which any t_(k) is wider than 6 arefiltered out, as are those even entries in which any t_(k) is wider than7. This is an arbitrary restriction designed to help make cluster(0)approximately the same size as cluster(3) and cluster(6), inasmuch aswithout such a restriction cluster(0) would be larger than the othertwo.

5. The first 929 t-sequences of each of the filtered cluster files areselected as the desired entries for the respective lookup tables.

Multirow Label Using Alternating Codeword Subsets

In the multirow label of the invention, each row uses codewords from adifferent subset than the rows immediately adjacent to it. This enablesthe scanner to recognize with a high degree of precision whether a scanline has crossed a row in the middle of a codeword, because if a row hasbeen crossed, the codewords scanned will not yield the same f(X) as theprevious row.

A row of codewords in accordance with the invention may convenientlycontain unique start and stop codes in the conventional manner whosex-sequences are, e.g., 81111113 and 71121113 respectively. These startand stop codes are unique in that no other codeword in any cluster hasthe same t-sequence as either of them; furthermore, they are members ofnone of the final subsets of codewords because the required conditionx_(j) ≦6 for all j=1, . . . , 8 is not true for those codes. The startcode may be selected to have its widest bar away from the ensuing datacodewords to reduce the possibility of intercodeword interference, as isthe above start code; if desired, the stop code may be so selected aswell.

The height to unit module ratio H (the ratio of the height of a codeword(or a row) to one module width) may be changed from label to label oreven from row to row depending on the printing/scanner (system orchannel) resolution, R, or on the need of various applications. FIG. 3shows the first and the last rows having H approximately equal to 10,the rows in between having H approximately equal to 3, and theresolution R being approximately equal to 10 mil.

The first row of the multirow label uses cluster(0) codes, the secondrow cluster(3) codes, the third cluster(6) codes, the fourth cluster(0)codes, the fifth cluster(3) codes, and so on. There is no logical limiton the number of codewords per row or the total number of rows.

In the embodiment illustrated here, the first codeword in each row isdedicated for use as a row identifier and the last codeword in each rowis a checksum. (The maximum number of rows is thus 929, i.e., the numberof codewords in the dedicated cluster). It is of course possible todistinguish between forward scanning and backward scanning of the row bymatching the start/stop codeword forwardly or backwardly.

Other Row-Wise Partitioning of Codewords

It will be apparent to those of ordinary skill having the benefit ofthis disclosure that the invention is not limited to the specific markpatterns, discriminator function f(X), and t-sequence described above.The foregoing method of deriving a symbology can be applied in asubstantially similar manner to yield equivalent symbologies havingother kinds of mark patterns.

For example, labels can be constructed from bars of varying shades ofgray or even from bars of a wide range of colors, instead of from blackand white marks only. In such a label, a discriminator function fordividing all possible mark patterns into mutually exclusive codewordsubsets, and a t-sequence function for uniquely identifying eachcodeword within a subset, may be based on a readily detectable attributeof a mark such as its hue or its gray scale value as well as on thewidth of each mark (or in lieu of the width, or in combination with thewidth).

It will likewise be apparent that, broadly construed, the same principleencompasses the equivalent use of codewords of different colors (orshades of gray) in alternate rows. That is, all rows of a multi-rowlabel could use the same subset of mark patterns as codewords, but indifferent colors or shades or orientations; the determination whether arow has been crossed would be made based on whether a color or shade ororientation change had occurred.

Subset Organization for Two-Step Decoding

In the illustrative, width-based embodiment described above, since eachcluster(i) includes 929 codewords, each t-sequence in a cluster thuswill correspond to a number from 0 to 928. The codewords in each subsetcan be organized according to a base 30 system in which one codeword,representing a number in base 30, is used to signify two alphanumericcharacters.

Codewords can be scanned and decoded as follows. When a codeword isscanned, its t-sequence is noted. The t-sequence is then used as inputto an initial, low-level decoding step; the output from the low-leveldecoding step is a number from 0 to 928 which in turn is used as aninput to a high-level decoding step.

Initial Low-Level Decoding Step

The low-level decoding step entails looking up the t-sequence in a tablefor the appropriate cluster to find a corresponding value. The table maybe created as described above. Referring to FIG. 14A (a lookup table forcluster(0)), for example, the t-sequence 246764 corresponds to the value111.

The actual circuitry for the lookup tables may be conventional; it willbe appreciated by those of ordinary skill that the use of a prime numberof codewords in a subset, e.g., 929, advantageously facilitates thedesign of the circuitry.

Mode-Dependent High-Level Decoding Step

The look-up value 111 from the foregoing example can be broken down intoa two-number sequence in base 30, each number being in the range 0-29and having a high-level value V_(H) and a low-level value V_(L). Thebase-30 sequence is computed as follows:

    V.sub.H =x div 30;

    and

    V.sub.L =x mod 30.

For the t-sequence used above, 246764, yielding a look-up value of 111,the high level value is 3, and the low level value is 21, since111=3×30+21. Each of the high and low values (i.e., 3 and 21) is thenevaluated by looking it up in a suitable (arbitrary) table, such asshown in FIG. 5.

The exemplar table in FIG. 5 shows 30 decoding modes, including Alpha,Numeric, Mixed, and User modes. The various User modes are designated asthe modes in FIG. 5 corresponding to columns 3 through 29 (with column 0being Alpha mode).

In the illustrative embodiment, the Alpha mode is the default mode;therefore, the sample t-sequence 246764 ultimately translates into thetwo-letter sequence DV, via the lookup value 111 and the base-30sequence 3, 21.

It will be seen that the coding arrangement depicted in FIG. 5 providesfor mode switching that can be advantageously effected either within asingle codeword or within a string of codewords. The technique forinvoking mode switching varies depending on the current decoder mode.

Examples of High-Level Decoding

The state machine diagram in FIG. 6 illustrates a high-level decodingprocess in accordance with the invention for the exemplar embodiment.For convenience, a two-number sequence in base 30 is represented as "xxHxxL" or "(xxH, xxL)," where "xx" represents an arbitrary one-ortwo-digit number. For example, a high-level value of 18 and a low-levelvalue of 10 is depicted herein as 18H, 10L or as (18H, 10L).

As an example, assume the decoder is currently in Alpha mode. As shownin FIG. 5, changing from Alpha mode to Mixed mode requires that eitherthe high value or the low value of the two-digit base-30 sequence beequal to 28. If the high value is 28, then the low value is unimportantfor mode switching purposes; likewise, if the low value is 28, then thehigh value is unimportant for mode switching purposes.

For Alpha mode, a high value of 28 signals to the decoder that a modeswitch to Mixed mode (depicted in FIG. 5 as "ms" or Mixed-mode switch)must be effected; therefore, the low value of the high value/low valuepair will be interpreted in the Mixed mode. A low value of 28 allows thedecoder to interpret the high value of the high value/low value pair inthe current mode, namely Alpha mode, and then to switch into Mixed mode.This mode switching technique allows a final value to be decoded in thecurrent mode before switching to the next mode, therefore eliminatingwaste resulting from using an extra high value/low value pair to insurethat a final high value is interpreted in the current mode.

With decoding being done in Alpha mode, a hypothetical value of 856yields 28H 16L, i.e., a high value of 28 and a low value of 16 (since856=28×30+16). The high value of 28 toggles the decoder into Mixed mode,and the low value 16, when translated according to Mixed mode protocol,yields "!" (an exclamation point).

To change from Alpha mode to User mode, a high value of 29 (depicted as"us" or User-mode switch) and any low value n within the range of 3 to29 is required. Low values of 0, 1, or 2 result in no mode switch, aswitch to Mixed mode, or a switch to Numeric mode, respectively. Incontrast to switching from Alpha to Numeric or Mixed modes, a switch toa User mode cannot be done by a low value of 29; any such values areignored.

Switching between other modes is done in a generally similar manner, asshown in FIGS. 5 and 6. Referring to those Figures, a decoder in Numericmode can only directly switch to Alpha mode or Mixed mode. To togglefrom Numeric mode to Alpha mode a non-position dependent value of 927 isrequired, i.e., either a high-level value or a low-level value equal to927 will effect the mode switch. Likewise, to toggle from Numeric modeto Mixed mode a non-position dependent value of 928 is required. It willbe apparent that the numbers 927 and 928 are the last two positions inthe Numeric mode, and are reserved for mode-switching characters forconvenience.

To change from User mode to one of the predefined modes (Alpha, Numericor Mixed) a high value of 29 and a low value within the range 0 to 2 arerequired. The low value in this combination corresponds to thepredefined mode into which the decoder is switching (i.e. a low value of0 corresponds to Alpha mode, a low value of 1 corresponds to Mixed modeand a low value of 2 corresponds to Numeric mode.

For example, assume that the current mode is Alpha and that threeconsecutive codewords are to be decoded: 872, 345 and 99. Translatinginto base 30, 872 yields a high level value of 29 and a low level valueof 2 (872=29×30+2). The first codeword 872 thus defines a User mode intowhich the decoder is switching. Referring to FIG. 5, if the decoder isin Alpha mode and a high level value of 29 and a low level value of 2are encountered (as in the example above), the decoder changes toNumeric mode.

As another example, assume that the decoder is in Alpha mode and thatthe scanned codeword's lookup value is 723. In this case V_(H) =723 div30=24, and V_(L) =723 mod 30=3. Therefore, the decoded codeword is (24H,3L). Since the current mode is Alpha, FIG. 5 yields (Y,D) as therespective values for the decoded codeword (24H, 3L).

Decoding of values in the Numeric mode differs from decoding of valuesin Alpha mode and Mixed mode. Decoding in Numeric mode treats atwo-number sequences as a number in base 926. For example, suppose thatthe current mode is Alpha and that the following three codewords areencountered 872, 345 and 99. A base 30 conversion of the first codeword872 yields H=29 and L=2. This sequence signals the decoder to switchfrom Alpha mode to Numeric mode. Switching to the radix-926 decodingsystem, the second and third codewords are decoded as(345×926)+99=319569.

The User modes may be used with considerable flexibility. All or part ofone or more modes may be used to represent a special user-defined code;for example, frequently-occurring words, phrases, sentences, paragraphs,etc. can be assigned to respective positions within a User mode. A givenphrase, etc., can then be represented in the label as a single codeword(combined with a "us" mode-switch command if necessary). It will beapparent that a great many different words, phrases, etc., can berepresented, e.g., in the coding scheme depicted in FIG. 5 as anillustration.

Encoding Method

An encoding procedure is the reverse process of the decoding procedure.For example, referring to FIG. 6, a license plate number "HUD-329" whenencoded yields the following string of codewords: 230, 926, 843, 69.Each element of the original string "HUD-329" is located in FIG. 5 andtranslated according to proper mode protocol. The first four elements ofthe string are translated using Alpha mode. This results in H=7, U=20,D=3, and -(hyphen)=26.

The last three elements may be translated using Mixed mode. To switch toMixed mode from Alpha mode a Mixed Shift (28) character is needed. TheMixed-mode translation then results in 3=3, 2=2 and 9=9. The completestring is thus 7 20 3 26 28 3 2 9.

This string is partitioned into high value/low value pairs, withresulting pairs (7,20) (3,26) (28,3) and (2,9). Each of these pairs isencoded as a codeword. To encode a high value/low value pair, the highvalue is multiplied by 30, and the low value is added to the result ofthis multiplication.

For example, the pair (7,20) is encoded by multiplying 7 times 30 andadding 20, yielding a result of 230. All four pairs are encoded in thismanner; the resulting string is 230 116 843 69. The string is translatedinto codewords in accordance with the appropriate lookup table for thecodeword subset in use. Assuming hypothetically that cluster(0) is inuse, the string is expressed using the codewords correspondingrespectively to t-sequences 335633 (for 230), 255663 (for 116), etc.

Checksum Computation

A checksum and error recovery scheme provides a row-oriented incrementalerror detection capability and high primitive decoding reliability.Within each row, a long polynomial division checksum scheme is used.

For convenience, each i-th codeword may be referred to by acorresponding index number a_(i), i.e., by the result of the low-leveldecoding step discussed above for that codeword. Each codeword's indexnumber a_(i) will thus have a value from 0 to 928; each codeword isreferred to sometimes for convenience by its index number.

Each row with codewords a_(n-1), a_(n-2), . . . , a₀ can be representedas a polynomial:

    a(x)=a.sub.0 +a.sub.1 x+a.sub.2 x.sup.2 . . . +a.sub.n-1 x.sup.n-1

This polynomial is referred to herein as the message polynomial, asdiscussed in, e.g., Shu Lin and D. J. Costello, Jr., Error ControlCoding, 1983.

A row checksum b_(r0) is defined as the remainder resulting fromdividing the message polynomial a(x) by a generator polynomial (seeibid.):

    g.sub.r (x)=x+926

Those of ordinary skill will recognize that 926 is the complement of 3in a Galois Field based on 929, or GF(929).

The checksum of each row can conveniently be computed using the checksumencoding circuit shown in FIG. 8. In FIGS. 8 through 13, the circle-plus(modulo addition), circle-X (modulo multiplication), and circle-C(modulo complementation) symbols are defined over GF(929) as:

    x(circle-plus)y≡(x+y)mod 929

    x(circle-X)y≡(x*y)mod 929

    (circle-C)x≡929-x

where x and y are any numbers from 0 to 928. It will of course berecognized that the design and construction of actual circuitry is amatter of routine implementation by those of ordinary skill. Suchcircuitry consequently is not further discussed here.

To perform the checksum computation, the register b_(r0) is initializedto 0. The input is a sequence of the codewords' index numbers a_(i) in arow, fed one number at a time into the input. The input fans into theoutput line (e.g., to a label printer) and the checksum encoding circuitsimultaneously.

As the first codeword is input, the circle-plus computation is performedwith the codeword's number a_(i) sequence and b_(r0) (i.e., 0) asoperands. The output of that computation and the number 926 is fed tothe circle-X computation; the output of that computation is complementedand stored in the b_(r0) register. After all of the codewords in a rowhave been processed through the checksum encoding circuit, thecomplement of the final value of b_(r0) is the checksum and is appendedat the end of the row. The sequence of codewords for the row (e.g., asprinted) is now a_(n-1), a_(n-2), . . . , a₀, 929-b_(r0).

A similar scheme is used to compute a structure checksum, onerepresenting the entire label. For this second type of checksum, allcodewords in the label as printed (including the codewords representingthe checksums for each row except the last row) form the messagepolynomial, which may be expressed as:

    a(x)=a.sub.m,2 +a.sub.m,3 x+ . . . +a.sub.m,n-1 x.sup.n-3 +b.sub.m-1,r0 x.sup.n-2 + . . . +a.sub.1,n-1 x.sup.nm-3

where the coefficients are defined as in FIG. 10, tracing backwardlyfrom right to left and bottom to top. A different generator polynomialis used to calculate a remainder in a similar fashion as before, namely:

    g.sub.s (x)=(x+926)(x+920)

Dividing the new message polynomial by this new generator polynomialresults in a remainder b(x)=b_(s0) +b_(s1) x. Complementing thecoefficients of this remainder yields two parity-check codewords, whichserve as a structure checksum as discussed below.

In implementation, this division is accomplished by using a divisioncircuit such as shown in FIG. 9. The registers b_(s0) and b_(s1) areinitialized as zeros. As soon as the message polynomial has entered theoutput and the circuit, the complements of the parity-check codewordsare in the registers and are appended in the order b_(s1), b_(s0) justbefore the checksum of the last row. Then the checksum b_(r0) of thelast row is computed and appended to the end of the last row, as shownin FIG. 10.

It will be noted that there are no user-definable codewordscorresponding to the positions a_(m),1 and a_(m),0. These positions arereserved for the codewords b_(s),1 and b_(s),0 as shown in FIG. 10.Thus, in a label with m rows and n codewords per row, the total numberof user definable codewords is nm-4m-2, i.e., the number of codewordsper row times the number of rows, minus four codewords for each row (astart code, a stop code, a row number, and a row checksum), and alsominus the two parity-check codewords (i.e., the structure checksum).

Gross Error Detection

Gross error detection may be accomplished as follows. At the beginningof the scanning process, all entries (e.g., "slots" or "grid locations")of the map of the label are initialized to indicate unknown characters.

The low-level decoding step, as applied to a signal generated by anygiven scanning pass, will generate a sequence of one or more indexnumbers, one for each codewords that was scanned. Each index number maybe any number from 0 to 928, depending on the t-sequence of thecorresponding scanned codeword.

For each scanning pass, three arrays DA, CA, and FA are constructed(e.g., in memory in accordance with conventional techniques) torepresent the codewords scanned in that pass:

A "decoding array" DA represents the index numbers that are obtainedfrom the tables in FIGS. 14A through 16D and that correspond to thescanned codewords.

A "cluster array" CA represents the clusters or subsets to which therespective scanned codewords belong.

A "confidence array" FA represents the confidence existing in theaccuracy of the decoding of the respective scanned codewords.

For example, a scanning pass and low-level decoding step may generate adecoding array DA comprising a sequence of index numbers such as (293,321, 209, 99, 679). The corresponding sequence of clusters might be (3,3, 0, 0, 0) indicating that the first two codewords were members ofcluster(3) and the final three were members of cluster(0). This impliesthat the subsequence comprising the second and third codewords(represented by 321 and 209 in the array DA) bracket the point at whicha row was crossed, i.e., that the two codewords are in two adjacentrows. Because such row-crossing subsequences frequently have highererror probability, they are assigned a relatively low weight in aconfidence array FA. In the example above, the confidence array FA forthe scanned codewords might be (3, 1, 1, 3, 3).

Now suppose that a previous scanning pass had resulted in a decodingarray DA of (293, 329, 222, 999, 999) for the same sequence ofcodewords, where 999 represents an unknown codeword whose confidencelevel is zero. Further assume that the confidence array FA for thatprevious scanning pass is (3, 3, 1, 0, 0), because the row was crossedbetween the third and fourth characters on that pass instead of betweenthe second and third characters as hypothesized in the previousparagraph.

A "voting" process may be used to compare the confidence arrays for thetwo scanning passes to determine which results are more likely to becorrect. For example, the voting rules may be as follows:

1. If two successive scans of a given codeword result in the same indexnumber after low-level decoding, then the corresponding confidencefigures in the two confidence arrays FA are added;

2. In contrast, if two successive scans result in different numbers forthe same codeword, then (a) if one of the two index numbers has a higherconfidence level than the other, the higher-confidence index number"survives" and is filled into the decoding array DA, but the confidencelevel for the corresponding position in the confidence array FA isreduced by the confidence level for the nonsurviving index number, (b)if both index numbers have equal confidence levels, then neither indexnumber survives; instead the unknown-codeword index number 999 is usedas the "surviving" index number and the confidence is reset to zero; and

3. If the index number a_(i) for one scan of a given codeword is 999(representing an unknown codeword) and an acceptable index number forthe other scan (i.e., an index number from 0 to 928), then theacceptable index number is kept, and the confidence level of that indexnumber remains the same.

It will of course be appreciated by those of ordinary skill that a widevariety of conventional array- and memory-management techniques may beused for creating and manipulating the arrays DA, CA, and FA. Forexample, the decoding array DA might be the label map itself, with atemporary array being used to hold the index numbers a_(i) for a newscan and with surviving index numbers from that scan being written intothe appropriate position in the array DA (or perhaps not written if thesame index number is already represented at that position). In such anexample, the cluster array CA and the confidence array FA might each be"shadows" of the decoding array DA, with as many positions in each asthere are in the decoding array DA.

When the decoding array DA has been filled with an acceptable indexnumber a_(i) for all codeword positions corresponding to a particularrow in the label, the representation of that row in the decoding arrayDA is set aside. That is, regardless of the confidence that exists aboutthe accuracy of the contents of the decoding array DA, once the row hasbeen decoded to indicate acceptable index numbers for each codeword, nofurther decoding is done for codewords in that row; additional errordetection proceeds as described below.

Further Error Detection and Recovery by Checksumming

Errors may still exist in the decoding array DA for a particular roweven after that row is set aside. Before performing high-level decoding,the redundant information stored in the row checksums and the labelchecksum can advantageously be used to detect and/or recover from errorsin scanning any particular codeword by a process of elimination.

Generally speaking, if all but one or two of the codewords in the entirelabel are known to be correct, the correct values of the unknowncodewords can be computed by "subtracting" (so to speak) the values ofthe known codewords from the values of the checksums, which of coursereflect the values of all codewords, known and unknown.

Errors in any particular row may be detected by using a syndrome dividersuch as shown in FIG. 11. The register d_(r0) is initialized to zero.After the index numbers a_(i) of the scanned row are fed to the syndromedivider, the register d_(r0) indicates the detection result. If d_(r0)is equal to zero, the corresponding row was correctly scanned and itsimage or map in memory can be locked; otherwise, an error occurred inthe scanning and decoding of the row, and the row must be rescanned. Ifall codewords in the label are decoded and check summed without error,then the following error recovery step can be skipped.

When the total number of still-unknown codewords is less or equal totwo, an error recovery scheme as follows can be invoked. The unknowncodewords first are replaced in the label map with zeros. A syndromeS_(i) is then computed for each i=1, 2. Since by hypothesis the positionp_(v) of the unknown (i.e., erroneous) codewords is known, where v=1, 2,only the values of those unknown codewords need be computed. As a firststep, an error value e_(pv) is computed for each error position p_(v) bysolving the following system of matrix equations: ##EQU1## If only oneerror exists, the system becomes overdetermined, that is, moreinformation is present than is needed to solve the above matrix, whichreduces to: ##EQU2##

For an assumed one-error case, if the above matrix equation system isconsistent (that is, if the foregoing two matrix equations yield thesame solutions), then one error does indeed exist and the solution of3^(p1) is the error value, i.e., the correct value of the unknowncodeword. Otherwise, an undiscovered second error exists in the label,and the decoding result is rejected.

After successfully solving for the error values, the complement of errorvalues are filled into the corresponding unknown codewords' locations.Then the error detection computation is performed again for those rowscontaining unknown codewords. If no errors are detected, the decodingresult then is taken as correct; otherwise, the decoding result islikewise rejected.

Nonvolatile Memory and Computer System

Referring to FIG. 18, a high density, two-dimensional bar code symbol100 may be created by marking a suitable substrate (e.g., paper) withone or more labels in accordance with the foregoing description. Thememory 100 may be combined with a fixed or a movable scanner 110 for useas a storage device for a suitably programmed computer such as aprocessor 120.

For example, a robot might have an on-board computer programmed tocontrol the robot to perform simple tasks, such as selectively moving anobject 130 by means of a manipulator 140. An on-board scanner 110 mightoperate as the robot's "eyes" for reading labels of the kind describedabove. In similar fashion, a conveyor system might include a fixedscanner 130 and a moving belt that served as the manipulator 140. Thelabel preferably contains a list of instructions for operating therobot, with the computer on-board. The robot responding to data andinstructions contained on the label.

Additional Illustrative Embodiments

It will of course be recognized by those of ordinary skill (having thebenefit of this disclosure) that the invention is capable of beingadapted to other uses and in other embodiments than the illustrativeones disclosed above. Furthermore, the invention may be implemented innumerous specific architectures. A few examples are briefly mentionedbelow for illustrative purposes:

The decoder of a conventional one-dimensional scanner could bereprogrammed to perform one or more of the functions described above,e.g., by replacing a read-only memory (ROM) chip containing theprogramming if the scanner is so constructed;

A scanning system could be built using a suitably programmedmicroprocessor or other computational unit to perform one or more of theabove functions. The programming could be loaded into dynamic read-writememory (RAM), or could be "burned" into read-only memory (ROM) eitheronboard or outboard of the microprocessor;

A scanning system could be built using a computation unit speciallydesigned to perform the functions described above;

Parallel processing technology could be used to partition the work ofdecoding the various parts of a label;

and so forth. The actual design and construction of any particularimplementation is a matter of routine for those of ordinary skill havingthe benefit of this disclosure, the details of which are not furtherdiscussed here.

Referring to FIG. 18, a computer system including a high density,two-dimensional bar code symbol 100 of the type described could be usedin a number of applications. As an illustration, an overnight packagedelivery service (e.g., Federal Express, UPS, Purolator, and the like)might have certain of its package-sorting functions automated throughthe use of memories 100 in the form of printed labels in accordance withthe foregoing, applied to packages such as the object 130 shown in thefigure. In one such possibility, package shippers would fill out awaybill 100 by responding to queries posed by a suitable computerprogram. The program's printed output (e.g., on a laser printer or dotmatrix printer) might include both a human-readable destination addressand a label 100 as described above in which that information was encodedin scannable form. The shipper would affix the printed waybill 100 tothe object 130 being shipped. (Other information such as the shipper'stelephone number and the like could likewise be so encoded.) One of thekey advantages of the high data capacity memory 100 of the presentinvention is that it may be created at the warehouse or loading dock byan inexpensive printer so that updated or corrected information may beapplied at the point of shipment. The fact that the memory is merely apaper label means that it is inexpensive and disposable. Thus, thepresent invention may be implemented in conjunction with a portableterminal and thermal printer to create and print a label, even in aremote location. Such a portable terminal, connected to scanner, allowsthe user to scan, print, and apply the label to the article quickly andinexpensively. At various points during shipment, suitable robots couldread the label 100 and, using manipulators 140, direct the object 130appropriately; e.g., a scanner 110 could read the memory 100 to generatea signal; based on the content of that signal, a manipulator 140controlled by a processor 120 could move the object 140 as appropriate.

A similar arrangement could be used in a warehouse inventory controlsystem. A label of the type described could be printed or otherwiseapplied to or inscribed on one or more sides of a shipping carton ordirectly to merchandise. The label might have encoded therein as muchinformation as desired about the specific item, e.g., its type, color,dimensions, weight, point of manufacture, lot number, and so forth. Asuitable robot could be used as an order-filling machine by movingwithin the warehouse and, using its scanner, searching for merchandisewhose label indicates that it matches a specified order. (Searchingcould of course be in accordance with techniques now known or hereafterdeveloped.) It will be apparent that this arrangement would permitinformation about specific merchandise items to be stored locally at themerchandise itself.

Such local storage could advantageously take the place of a separatefile of information about the item, e.g., stored in a computer data baseand keyed to a bar-code serial number on the item. Local storage wouldreduce the problem of dealing with "orphan" merchandise whose serialnumbers were not known to the computer data base. In addition, it wouldpermit rapid in-processing of newly-received merchandise shipments, inthat complete information about the new merchandise could be scannedinto the warehouse's information system, obviating the need for theshipper to generate and transmit a separate information file (e.g., on acomputer tape or by hard copy) about the specific items being shipped.This would similarly be advantageous in, e.g., libraries or otherorganizations that regularly received shipments of books or similarobjects that required cataloging.

Another feature of the present invention is to utilize the bar codeaccording to the present invention so that it may be affixed to anarticle as a means of identifying that article and associatinginformation with the article much like a "read-only memory" oridentification tag implemented in so called RF ID systems. One suchimplementation is to print a variety of different bar code symbols whichare available in easily disposable and affixable format so thatinformation may be easily and quickly affixed to the article. Oneexample of an application is in connection with the repair and serviceof equipment. The use of a service record is useful for quality controland documentation purposes, but it is often impractical to storedetailed written records with the equipment. The use of a high density,encoded services report affixed to the equipment in the form of atwo-dimensional bar code is especially advantageous. The servicetechnician may select the appropriate PDF label from a set of labelscorresponding to repairs performed, and attach the label to the repairedequipment. If the equipment is returned for subsequent repairs, theservice technician has the complete service history attached to theequipment in only a few square inches.

As another example, a high density, two demensional bar code symbol andscanner system could be used for enhanced searching of microfilm rollsor microfiche sheets. Assume that a large body of text and/or graphicalinformation is stored photographically on a roll of microfilm. Anexample of such information might be the thousands ofdocuments--printed, typed, handwritten, drawn, or a combinationthereof--that can be involved in a large litigation. Known computerizedlitigation support systems permit paralegals to summarize each documentpage in a data base; for each document page, selected information fromthe data base could be inscribed as a label in accordance with theforegoing on the corresponding frame of microfilm, in a corner or otherappropriate location.

A microfilm reader could be equipped with (a) input means such as akeyboard by which a user could specify search criteria (e.g., in Booleanlogic); (b) a fixed scanner to read microfilm labels as the microfilmwas scrolled; and (c) control means to determine whether a givenmicrofilm frame satisfied the specified search criteria. The user wouldthen be able to view documents conveniently. In the case ofmultiple-reel document collections, a master index or indexes could beencoded on a separate reel; output means such as a CRT or an LCD or LEDdisplay could be used to instruct the user as to which reel to mount tolocate the specific document desired.

For example, a microfilm reader with a scanner might be designed to becoupled to and controlled by a conventional desktop, laptop, or notebookcomputer in a conventional manner as a peripheral device (or theessentials of such a computer could be built into the reader). Thecomputer would not need to have the entire document-summary data baseavailable on disk storage, since the microfilm itself would contain thenecessary information; it would suffice if the computer was programmed(e.g., in ROM) to perform the desired search functions using thelabel-encoded data from the microfilm.

Still another feature of the present invention is to provide a methodfor processing information by optically scanning indicia on the surfaceof a substrate, the indicia including a plurality of codewords scannedsequentially and organized into at least two independent scanning paths,each codeword being either an information codeword or a controlcodeword, and each information codeword corresponding to at least oneinformation-containing character. A plurality of different mappingfunctions are provided each associating the code word with one characterout of a set of different characters, with only one mapping functionbeing active at any given time. Each codeword in any one scanning pathis distinct from any codeword in an adjacent scanning path. Using such acodeword data structure, the method includes the steps of: determiningwhether a scanned codeword is an information codeword or a controlcodeword; decoding the codeword according to the mapping function ifsaid codeword is an information codeword; and processing the codeword ifthe codeword is a control codeword. If the codeword is a controlcodeword, it identifies a new mapping function, and processing ofsubsequently scanned codewords take place using the new mappingfunction.

As an example of the different scanning paths that may be used, and adifferent organization of the codewords, reference is made to FIGS. 19and 20.

FIG. 19a, 19b, 19c, and 19d is an alternative type of laser scanningpattern that may be used in connection with the present invention.

The present invention may be implemented in a hand-held, laser-scanning,bar code reader until such as illustrated in FIG. 21. This hand-helddevice of FIG. 21 is generally of the style disclosed in U.S. Pat. No.4,760,248, issued to Swartz et al., assigned to Symbol Technologies,Inc., and also similar to the configuration of a bar code readercommercially available as part number LS 8100II from SymbolTechnoligies, Inc. Alternatively, or in addition, features of U.S. Pat.No. 4,387,297 issued to Swartz et al., or U.S. Pat. No. 4,409,470 issuedto Shepard et al., both such patents assigned to Symbol Technologies,Inc., may be employed in constructing the bar code reader unit of FIG.21. These U.S. Pat. Nos. 4,760,248, 4,387,297 and 4,409,470 areincorporated herein by reference. An outgoing light beam 151 isgenerated in the reader 100, usually by a laser diode or the like, anddirected to impinge upon a bar code symbol a few inches from the frontof the reader unit. The outgoing beam 151 is scanned in a fixed linearpattern, or more complex pattern such as shown in FIG. 19 may beemployed and the user positions the hand-held unit so this scan patterntraverses the symbol to be read. The use of a central dark portion, suchas in FIG. 19d, may be used for aiming, or other visual techniquesassociated with alignment. Reflected light 152 from the symbol isdetected by a light-responsive device 146 in the reader unit, producingserial electrical signals to be processed for identifying the bar code.The reader unit 100 is a gun shaped device, having a piston-grip type ofhandle 153 and movable trigger 154 is employed to allow the user toactivate the light beam 151 and detector circuitry when pointed at thesymbol to be read, thereby saving battery life if the unit isself-powered. A light-weight plastic housing 155 contains the laserlight source, the detector 146, the optics and signal processingcircuitry, and the CPU 140 as well as a battery 162. Alight-transmissive window 156 in the front end of the housing 155 allowsthe outgoing light beam 151 to exit and the incoming reflected light 152to enter. The reader 100 is designed to be aimed at a bar code symbol bythe user from a position where the reader 100 is spaced from the symbol,i.e., not touching the symbol or moving cross the symbol. Typically,this type of hand-held bar code reader is specified to operate in therange of perhaps several inches.

As seen in FIG. 21, a suitable lens 157 (or multiple lens system) isused to collimate and focus the scanned beam into the bar code symbol atan appropriate reference plane, and this same lens 157 may be used tofocus the reflected light 152. A light source 158 such as asemiconductor laser diode is positioned to introduce a light beam intothe axis of the lens 157 by a partially-silvered mirror and other lensesor beam-shaping structure as needed, along with an oscillating mirror159 which is attached to a scanning motor 160 activated when the trigger154 is pulled. If the light produced by the source 158 is not visible,an aiming light may be included in the optical system, again employing apartially-silvered mirror to introduce the beam into the light pathcoaxially with the lens 157. The aiming light, if needed, produces avisible-light spot which is scanned just like the laser beam; the useremploys this visible light to aim the reader unit at the symbol beforepulling the trigger 154.

In real applications, either the length of bar code should be fixed, oran additional character should be placed in the bar code to indicate itslength. If not, misdecodings may occur.

If the length of the bar code is fixed, the performance of decodingusing stitching might be better than that of decoding using a completescan, because the reject rate and the misdecode rate is less in mostgood quality bar codes (in cases where the quality of the bar code isvery poor, the misdecode rate may be greater, but never greater than 2Ktimes, where K is the number of the scans used for stitching).

Although the present invention has been described with respect tomultiple line bar codes, it is not limited to such embodiments. It isconceivable that the method of the present invention may also findapplication for use with various machine vision or optical characterrecognition applications in which information is derived from othertypes of indicia such as characters or from the surface characteristicsof the article being scanned.

In all of the various embodiments, the elements of the scanner may beassembled into a very compact package that allows the scanner to befabricated as a single printed circuit board or integral module. Such amodule can interchangeably be used as the laser scanning element for avariety of different types of data acquisition systems. For example, themodule may be alternately used in a hand-held scanner, a table topscanner attached to a flexible arm or mounting extending over thesurface of the table or attached to the underside of the table top, ormounted as a subcomponent or subassembly of a more sophisticated dataacquisition system.

The module would advantageously comprise a laser/optics subassemblymounted on a support, a scanning element such as a rotating orreciprocating mirror, and a photodetector component. Control or datalines associated with such components may be connected to an electricalconnector mounted on the edge or external surface of the module toenable the module to be electrically connected to a mating connectorassociated with other elements of data acquisition system.

An individual module may have specific scanning or decodingcharacteristics associated with it, e.g. operability at a certainworking distance, or operability with a specific symbology or printingdensity. The characteristics may also be defined through the manualsetting of control switches associated with the module. The user mayalso adapt the data acquisition system to scan different types ofarticles or the system may be adapted for different applications byinterchanging modules on the data acquisition system through the use ofthe simple electrical connector.

The following claims are intended to encompass all such uses,implementations, and embodiments.

What is claimed is:
 1. A method of generating a signal representative ofinformation encoded in a machine-readable label,(A) saidmachine-readable label including at least two rows of codewords, one rowadjacent to and beneath another (B) each said codeword representing atleast one information-bearing character and being selected from among aset of detectable mark/space patterns, (C) each said mark/space patternhaving a determinable discriminator function value and comprising apattern of marks and spaces, each said mark and space beingrepresentative of one of a plurality of different states, (D) each saidrow having codewords selected from one of a plurality of subsets of saidmark/space patterns, each said subset comprising mark/space patternshaving discriminator function values that are mutually exclusive ofdiscriminator values corresponding to the mark/space patterns comprisingany other subset, said method including the steps of:(a) scanning thecodewords; (b) computing the discriminator function value for each ofthe scanned codewords; (c) determining, from the value of the computeddiscriminator function, the row containing each of the scannedcodewords; (d) decoding each of the scanned codewords to obtain aplurality of corresponding symbolic values; and (e) generating a signalrepresentative of the presence of each of said corresponding symbolicvalues in the determined row.
 2. A method of generating a signalrepresentative of information encoded in a machine-readable label,(A)said machine-readable label including first, second, and third rows ofcodewords and at least one control word, each said codeword representingat least one information-bearing character and being selected from amongfirst, second, and third subsets of detectable mark/space patterns, (B)each said mark/space pattern comprising a fixed width pattern of atleast eight marks and spaces of varying widths representing on statesand off states, (C) each said mark and space having a width x_(i) of anintegral multiple of a basic width unit, (D) each of said first, second,and third subsets including only codewords X matching all of thefollowing criteria: (i) a discriminator function f(X)=(x₁ -x₃ +x₅ -x₇)mod 9 of each codeword X in the respective first, second, and thirdsubsets is equal to 0, 3, or 6, respectively, (ii) all t-sequences t_(i)=x_(i) +x_(i+1) of each codeword X are not greater than 9 basic widthunits, and (iii) each codeword X includes only marks and spaces whosewidths are not greater than 6 basic width units, said method includingthe steps of:(a) scanning said mark/space patterns within saidmachine-readable label and generating an electronic image of each ofsaid scanned mark/space patterns; (b) determining whether each of saidscanned mark/space patterns is a codeword; (c) if any of said scannedmark/space patterns is a codeword, then classifying each of thecodewords as a member of one of the first, second, or third subsets; (d)decoding each of the codewords in the corresponding classified subset;and (e) generating a signal uniquely representing the codewords.
 3. Themethod as set forth in claim 2 in which said step of determining whethereach of said scanned mark/space patterns is a codeword includes thesteps of:(a) computing for each of the scanned mark/space patterns at-sequence of N-1 digits whose i^(th) digit is t_(i), where N is thenumber of marks and spaces in a scanned mark/space pattern; (b)computing the discriminator function of each of the scanned mark/spacepatterns; and (c) if the computed t-sequence and the computeddiscriminator function for any of the scanned mark/space patterns failto satisfy the criteria for said first, second, and third subsets, thenindicating that each said failed mark/space pattern is not a codeword.4. A method of generating a signal representative of information encodedin a machine-readable label,(A) said machine-readable label includingfirst, second, and third rows of codewords and at least one controlword, each said codeword representing at least one information-bearingcharacter and being selected from among first, second, and third subsetsof detectable mark/space patterns, (B) each said mark/space patterncomprising a fixed width pattern of at least eight marks and spaces ofvarying widths representing on states and off states, (C) each said markand space having a width x_(i) of an integral multiple of a basic widthunit, (D) each of said first, second, and third subsets including onlycodewords X matching all of the following criteria: (i) a discriminatorfunction f(X)=(x₁ -x₃ +x₅ -x₇) mod 9 of each codeword X in therespective first, second, and third subsets is equal to 0, 3, or 6,respectively, (ii) all t-sequences t_(i) =x_(i) +x_(i+1) of eachcodeword X are not greater than 9 basic width units, and (iii) eachcodeword X includes only marks and spaces whose widths are not greaterthan 6 basic width units, said method including the steps of:(a)scanning said mark/space patterns within said machine-readable label andgenerating an electronic image of each of said scanned mark/spacepatterns; (b) computing for each of the scanned mark/space patterns at-sequence of N-1 digits whose i^(th) digit is t_(i), where N is thenumber of marks and spaces in a scanned mark/space pattern; (c)computing the discriminator functions of each of the scanned mark/spacepatterns; (d) if the computed t-sequence and the computed discriminatorfunction for any of the scanned mark/space patterns fail to satisfy thecriteria for said first, second, and third subsets, then indicating thateach said failed mark/space pattern is not a codeword; (e) if any ofsaid scanned mark/space patterns is a codeword, then classifying each ofthe codewords as a member of one of the first, second, or third subsets;(f) according to the classified subset, performing a first level ofdecoding each of the codewords including obtaining from one of threelookup tables in a first memory, the three tables respectivelyrepresenting the first, second, and third subsets, a plurality of indexnumbers uniquely corresponding to the computed t-sequences; (g)performing a second level of decoding the codewords including:(1)converting each said index number into a two-digit number in base 30,the first digit of said two-digit number being a high value and thesecond digit being a low value; (2) for each of the high values and thelow values in succession, (i) determining, from the state of adecoding-mode variable stored in a second memory, which of a pluralityof decoding modes is a currently active decoding mode, (ii) determininga symbol character associated with the high value or low value from alookup table in said second memory associated with the active mode, and(iii) if the symbol character is a shift character, changing to aspecified new current decoding mode and changing the state of thedecoding-mode variable to correspond to the new decoding mode; and (h)generating a signal uniquely representing the codewords.
 5. A method ofgenerating a signal representative of information encoded in amachine-readable label,(A) said machine-readable label including first,second, and third rows each comprising a plurality of codewords and atleast one control word, (B) each said codeword representing at least oneinformation-bearing character and being selected from among first,second, and third subsets of detectable mark/space patterns, (C) eachsaid mark/space pattern comprising a fixed width pattern of at leasteight marks and spaces of varying widths representing on states and offstates, (D) each said mark and space having a width x_(i) of an integralmultiple of a basic width unit, (E) each of said first, second, andthird subsets including only codewords X matching all of the followingcriteria: (i) a discriminator function f(X)=(x₁ -x₃ +x₅ -x₇) mod 9 ofeach codeword X in the respective first, second, and third subsets isequal to 0, 3, or 6, respectively, (ii) all t-sequences t_(i) =x_(i)+x_(i+1) of each codeword X are not greater than 9 basic width units,and (iii) each codeword X includes only marks and spaces whose widthsare not greater than 6 basic width units, (F) each said row including achecksum codeword representing a checksum function of the othercodewords in the row, the checksum function being a function of uniquerespective values of each codeword in the row, said method including thesteps of:(a) scanning said mark/space patterns within a row andgenerating an electronic image of each of said scanned mark/spacepatterns; (b) computing for each of the scanned mark/space patterns at-sequence of N-1 digits whose i^(th) digit is t_(i), where N is thenumber of marks and spaces in a scanned mark/space pattern; (c)computing the discriminator function of each of the scanned mark/spacepatterns; (d) if the computed t-sequence and the computed discriminatorfunction for any of the scanned mark/space patterns fail to satisfy thecriteria for said first, second, and third subsets, then indicating thateach said failed mark/space pattern is not a codeword; (e) if any of thescanned mark/space patterns is a codeword, then classifying each of thecodewords as a member of one of the first, second, or third subsets; (f)according to the classified subset, performing a first level of decodingeach of the codewords including obtaining from one of three lookuptables in a first memory, the three tables respectively representing thefirst, second, and third subsets, a plurality of initial index numbersuniquely corresponding to the computed t-sequences; (g) storing saidinitial index numbers for each of the codewords in corresponding storagelocations in an initial decoding array DA in a second memory; (h) if aninitial index number has been stored in the initial decoding array DAfor all codewords in each of said rows, then computing checksumfunctions of the codewords represented in the initial decoding array DA;(i) if any of the computed checksum functions does not match thechecksum codeword for the respective row, then indicating an error; (j)if a computed checksum function does match the checksum codeword for therow, then performing a second level of decoding the codewords including(1) converting each said initial index number into a two-digit number inbase 30, the first digit of said two-digit number being a high value andthe second digit being a low value, (2) for each of the high values andthe low values in succession, (i) determining, from the state of adecoding-mode variable stored in a third memory, which of a plurality ofdecoding modes is a currently active decoding mode, (ii) determining asymbol character associated with the high value or low value from alookup table in said third memory associated with the active mode, and(iii) if the symbol character is a shift character, changing to aspecified new current decoding mode and changing the state of thedecoding-mode variable to correspond to the new decoding mode; and (k)generating a signal uniquely representing the codewords.
 6. The methodas claimed in claim 5, further including the following steps:(l)determining a plurality of initial confidence level values correspondingto each of said initial index numbers stored in the initial decodingarray (DA) and storing the determined initial confidence level values ina corresponding initial confidence array (FA) in a second memory; (m)rescanning, redecoding, and redetermining a plurality of updated indexnumbers and corresponding updated confidence level values; (n) storingin an updated decoding array in said first memory and in an updatedconfidence array in said second memory the respective updated indexnumbers and updated confidence level values; (o) if, for each saidcodeword, the updated index number equals the initial index number andthe updated and initial index numbers each equal one of a plurality ofknown codewords, then (i) adding the corresponding initial and updatedconfidence level values to obtain a final confidence value, (ii) storingthe final confidence level value in a final confidence array, and (iii)storing the initial index number in a final decoding array; (p) if, foreach said codeword, the updated index number does not equal the initialindex number and the updated and initial index numbers each equal one ofsaid plurality of known codewords, then(1) if the corresponding initialconfidence value is greater than the updated confidence value, thenstoring the initial index number in a final decoding array, calculatinga corresponding final confidence value by subtracting the updatedconfidence value from the initial confidence value, and storing thefinal confidence value in a final confidence array, (2) if thecorresponding updated confidence value is greater than the initialconfidence value, then storing the updated index number in said finaldecoding array, calculating the corresponding final confidence value bysubtracting the initial confidence value from the updated confidencevalue, and storing the final confidence value in said final confidencearray, and (3) if the corresponding initial and updated confidencevalues are equal, then storing a predetermined unknown index number insaid final decoding array, setting the corresponding final confidencevalue to zero, and storing the final confidence value in said finalconfidence array; and (q) if, for each said codeword, either the initialindex number or the updated index number equals the predeterminedunknown index number and the other index number equals one of saidplurality of known index numbers, then storing the known index numberand the corresponding confidence value in said final decoding array andsaid final confidence array, respectively.
 7. A method of scanning anddecoding a series of patterns representative of information encoded in amachine-readable label,(A) said machine-readable label including first,second, and third rows each comprising a plurality of codewords and atleast one control word, (B) each said codeword representing at least oneinformation-bearing character and being selected from among first,second, and third subsets of detectable mark/space patterns, (C) eachsaid mark/space pattern comprising a fixed width pattern of at leasteight marks and spaces of varying widths representing on states and offstates, (D) each said mark and space having a width x_(i) of an integralmultiple of a basic width unit, (E) each of said first, second, andthird subsets including only codewords X matching all of the followingcriteria: (i) a discriminator function f(X)=(x₁ -x₃ +x₅ -x₇) mod 9 ofeach codeword X in the respective first, second, and third subsets isequal to 0, 3, or 6, respectively, (ii) all t-sequences t_(i) =x_(i)+x_(i+1) of each codeword X are not greater than 9 basic width units,and (iii) each codeword X includes only marks and spaces whose widthsare not greater than 6 basic width units, (F) each said row including arow checksum codeword representing a checksum function of the othercodewords in the row, the checksum function being a function of uniquerespective values of each codeword in the row, (G) the machine-readablelabel including a sequence of one or more codewords representing astructure checksum for the machine-readable label, said method includingthe steps of:(a) scanning a mark/space pattern within a row andgenerating an electronic image of said scanned mark/space pattern; (b)computing a t-sequence of N-1 digits whose i^(th) digit is t_(i), whereN is the number of marks and spaces in the scanned mark/space pattern;(c) computing the discriminator function of the scanned mark/spacepattern; and (d) if the computed t-sequence and the computeddiscriminator function fail to satisfy the criteria for said first,second, and third subsets, then indicating that the scanned mark/spacepattern is not a codeword; (e) if the scanned mark/space pattern is acodeword, then classifying the codeword as a member of one of the first,second, or third subsets; (f) according to the classified subset,performing a first level of decoding the codeword including obtainingfrom one of three lookup tables in a first memory, the three tablescorresponding to the first, second, and third subsets, an initial indexnumber uniquely corresponding to the computed t-sequence; (g) storingsaid initial index number for the codeword in a corresponding storagelocation in an initial decoding array DA in a second memory; (h)repeatedly performing steps (a) through (g) until an initial indexnumber has been stored in the initial decoding array DA for (i) each ofthe row checksum codewords for each said row and the structure checksumcodeword sequence, and (ii) all but at most two of all codewords in allrows of the machine-readable label; (i) if an initial index number hasnot been stored for an unknown codeword in any of said rows, thencomputing an initial index number for each said unknown codeword as afunction of one or both of the initial index numbers corresponding tothe respective row checksum codeword and the structure checksum codewordsequence; (j) if an initial index number has been stored in the initialdecoding array DA for all codewords in any of said rows, then computingthe respective checksum function of the codewords represented in theinitial decoding array DA for each said row; (k) if the computedchecksum function does not match the row checksum codeword for any ofsaid rows, then indicating an error for each unmatched checksumfunction.
 8. The method as set forth in claim 7 including the additionalsteps, if the computed checksum does match the checksum codeword for therow, of:(l) performing a second level of decoding the codewordsincluding:(1) converting each said initial index number into a two-digitnumber in base 30, the first digit of said two-digit number being a highvalue and the second digit being a low value; (2) for each of the highvalues and the low values in succession, (i) determining, from the stateof a decoding-mode variable stored in a third memory, which of aplurality of decoding modes is a currently active decoding mode, (ii)determining a symbol character associated with the high value or lowvalue from a lookup table in said third memory associated with theactive mode, and (iii) if the symbol character is a shift character,changing to a specified new current decoding mode and changing the stateof the decoding-mode variable to correspond to the new decoding mode;and (m) generating a signal uniquely representing the codewords.
 9. Themethod as claimed in claim 7 further including the following steps:(m)determining a plurality of initial confidence level values correspondingto each of said initial index numbers stored in the initial decodingarray (DA) and storing the determined initial confidence level values ina corresponding initial confidence array (FA) in a second memory; (n)rescanning, redecoding, and redetermining a plurality of updated indexnumbers and corresponding updated confidence level values; (o) storingin an updated decoding array in said first memory and in an updatedconfidence array in said second memory the respective updated indexnumbers and updated confidence level values; (p) if, for each saidcodeword, the updated index number equals the initial index number andthe updated and initial index numbers each equal one of a plurality ofknown codewords, then (1) adding the corresponding initial and updatedconfidence level values to obtain a final confidence value, (2) storingthe final confidence level value in a final confidence array, and (3)storing the initial index number in a final decoding array; (q) if, foreach said codeword, the updated index number does not equal the initialindex number and the updated and initial index numbers each equal one ofsaid plurality of known codewords, then(1) if the corresponding initialconfidence value is greater than the updated confidence value, thenstoring the initial index number in a final decoding array, calculatinga corresponding final confidence value by subtracting the updatedconfidence value from the initial confidence value, and storing thefinal confidence value in a final confidence array, (2) if thecorresponding updated confidence value is greater than the initialconfidence value, then storing the updated index number in said finaldecoding array, calculating the corresponding final confidence value bysubtracting the initial confidence value from the updated confidencevalue, and storing the final confidence value in said final confidencearray, and (3) if the corresponding initial and updated confidencevalues are equal, then storing a predetermined unknown index number insaid final decoding array, setting the corresponding final confidencevalue to zero, and storing the final confidence value in said finalconfidence array; and (r) if, for each said codeword, either the initialindex number or the updated index number equals the predeterminedunknown index number and the other index number equals one of saidplurality of known index numbers, then storing the known index numberand the corresponding confidence value in said final decoding array andsaid final confidence array, respectively.
 10. The method as set forthin claim 9, including the additional steps of:(s) performing, if thecomputed checksum matches the checksum codeword for the row, a secondlevel of decoding the scanned codewords including:(1) converting eachindex number stored in said final decoding array into a two-digit numberin base 30, the first digit of said two-digit number being a high valueand the second digit being a low value; (2) for each of the high valuesand the low values in succession, (i) determining, from the state of adecoding-mode variable stored in a third memory, which of a plurality ofdecoding modes is a currently active decoding mode, (ii) determining asymbol character associated with the high value or low value from alookup table in said third memory associated with the active mode, and(iii) if the symbol character is a shift character, changing to aspecified new current decoding mode and changing the state of thedecoding-mode variable to correspond to the new decoding mode; and (t)generating a signal uniquely representing the scanned codewords.
 11. Amethod for generating a signal produced by scanning a machine-readablelabel that includes a plurality of codewords organized into at least twoadjacent rows, each said codeword representing at least onehuman-recognizable symbol and no codeword in any one row being identicalto any codeword in an adjacent row, said method including the stepsof:(a) scanning said label to detect said codewords; (b) determining adetectable characteristic for each said scanned codeword; (c) computinga unique index number for each said scanned codeword as a function ofsaid detectable characteristic; and (d) processing each of the indexnumbers to generate a signal representative of the at least onehuman-recognizable symbol.
 12. The method as set forth in claim 11 inwhich the step of determining a detectable characteristic for each saidscanned codeword includes the step of computing a discriminatorfunction, no codeword in any one row having a discriminator functionidentical to that of a codeword in an adjacent row.
 13. The method asset forth in claim 11 in which each said codeword comprises a fixedwidth pattern of at least eight marks and spaces of varying widths andeach said mark and space has a width x_(i) of an integral multiple of abasic width unit;wherein the step of determining a detectablecharacteristic for each said scanned codeword includes the step ofcomputing a discriminator function f(X)=(x₁ -x₃ +x₅ -x₇) mod 9 of eachcodeword; and wherein no codeword in any one row has a function f(X)identical to the function f(X) of any codeword in an adjacent row. 14.The method as set forth in claim 11, wherein no codeword in any one rowhas a function f(X) identical to the function f(X) of any codeword in anadjacent row, each said codeword comprising a fixed width pattern of atleast eight marks and spaces of varying widths and each said mark andspace has a width x_(i) of an integral multiple of a basic width unit,the step of determining a detectable characteristic for each saidscanned codeword including the steps of:(a) computing a functionf(X)=(x₁ -x₃ +x₅ -x₇) mod 9 of each codeword; and (b) computing for eachcodeword a function t_(k) =x_(k) +x_(k+1) for k=1, . . . ,
 7. 15. Themethod as set forth in claim 11 in whichthe determining step representsa first decoding step and the computing step represents a seconddecoding step; and in which the step of processing each of the indexnumbers includes the substeps of determining whether each said codewordincludes a representation of a mode-switching symbol, and if so,switching from a first decoding mode to a second decoding mode.
 16. Amethod for storing and retrieving information by scanning indicia on thesurface of a substrate,(A) said indicia including a plurality ofcodewords scanned sequentially and organized into at least two adjacentrows, (B) each codeword being either an information codeword or acontrol codeword, (C) each information codeword being a representationof at least one information-containing data structure, (D) no codewordin any one row being identical to any codeword in an adjacent row, saidmethod comprising the steps of:(a) storing information includingapplying said indicia to said substrate; and (b) retrieving saidinformation, including:(1) scanning said indicia to detect a codeword;(2) determining whether said scanned codeword is an information codewordor a control codeword, (3) providing a plurality of different protocols,each said protocol associating said scanned codeword with acorresponding one of said data structures, only one protocol beingactive at any given time; (4) if said scanned codeword is an informationcodeword, decoding and outputting said scanned codeword according to theactive protocol, (5) if said scanned codeword is a control codeword,processing said scanned codeword to decode a symbol representative of anew protocol, and changing the active protocol to the new protocol, and(6) repeating steps (1) through (5) until all codewords are decoded. 17.An apparatus for generating a signal representative of informationencoded in a machine-readable label, said machine-readable labelincluding at least two adjacent rows of codewords, each said codewordrepresenting at least one information bearing character and beingselected from a set of detectable mark/space patterns, each saidmark/space pattern having a determinable discriminator function, theapparatus comprising:scanning means for scanning said codewords withinthe machine-readable label; means for computing a discriminator functionvalue for each of the each of the scanned codewords; means fordetermining, from the value of the discriminator function computed bythe computing means, the row of the machine-readable label correspondingto each of the scanned codewords; means for decoding each of the scannedcodewords to obtain a plurality of corresponding symbolic values; andmeans for generating a signal representing the presence of each of saidplurality of corresponding symbolic values in the determined row.
 18. Anapparatus for generating a signal representative of information encodedin a machine-readable label, said machine-readable label includingfirst, second, and third rows of codewords and at least one controlword, each said codeword representing at least one information-bearingcharacter and being selected from first, second, and third subsets ofdetectable mark/space patterns, each said mark/space pattern comprisinga fixed width pattern of at least eight marks and spaces of varyingwidths representing on states and off states, each said mark and spacehaving a width x_(i) of an integral multiple of a basic width unit, eachof said first, second, and third subsets including only codewords Xmatching all of the following criteria:(i) a discriminator functionf(X)=(x₁ -x₃ +x₅ -x₇) mod 9 of each codeword in the respective first,second and third subsets is equal to 0, 3, or 6, respectively, (ii) allt-sequences t_(i) =x_(i) +x_(i+1) of each codeword X are not greaterthan 9 basic width units, and (iii) each codeword X includes only marksand spaces whose widths are not greater than 6 basic width units, theapparatus comprising:(a) means for scanning said mark/space patternswithin said machine-readable label and for generating an electronicimage of each of said scanned mark/space patterns; (b) means fordetermining whether each of said scanned mark/space patterns is acodeword; (c) means, coupled to said determining means, for classifyingeach of the codewords as a member of one of the first, second, or thirdsubsets; (d) means for decoding in the classified subset each of thecodewords; and (e) means for generating a signal uniquely representingthe codewords.
 19. The apparatus as set forth in claim 18 in which saidmeans for determining whether each of said scanned mark/space patternsis a codeword includes:(i) first means for computing, from each of thescanned mark/space patterns, a t-sequence of N-1 digits whose i^(th)digit is t_(i), where N is the number of marks and spaces in a scannedmark/space pattern; (ii) second means for computing the discriminatorfunction of each of the scanned mark/space patterns; and (iii) means,coupled to the first and second computing means, for indicating that anyof the scanned mark/space patterns is not a codeword, if the computedt-sequence and the computed discriminator function fail to satisfy thecriteria for said first, second, and third subsets.
 20. An apparatus forgenerating a signal representative of information encoded in amachine-readable label, said machine-readable label including first,second, and third rows of codewords and at least one control word, eachsaid codeword representing at least one information-bearing characterand being selected from first, second, and third subsets of detectablemark/space patterns, each said mark/space pattern comprising a fixedwidth pattern of at least eight marks and spaces of varying widthsrepresenting on states and off states, each said mark and space having awidth x_(i) of an integral multiple of a basic width unit, each of saidfirst, second, and third subsets including only codewords X matching allof the following criteria:(i) a discriminator function f(X)=(x₁ -x₃ +x₅-x₇) mod 9 of each codeword in the respective first, second and thirdsubsets is equal to 0, 3, or 6, respectively, (ii) all t-sequences t_(i)=x_(i) +x_(i+1) of each codeword X are not greater than 9 basic widthunits, and (iii) each codeword X includes only marks and spaces whosewidths are not greater than 6 basic width units, the apparatuscomprising:(a) means for scanning said mark/space patterns within saidmachine-readable label and for generating an electronic image of each ofsaid scanned mark/space patterns; (b) first means for computing, fromeach of the scanned mark/space patterns, a t-sequence of N-1 digitswhose i^(th) digit is t_(i), where N is the number of marks and spacesin each of the scanned mark/space patterns; (c) second means forcomputing the discriminator function of each of the scanned mark/spacepatterns; (d) means, coupled to the first and second computing means,for indicating that any of the scanned mark/space patterns is not acodeword, if the computed t-sequence and the computed discriminatorfunction fail to satisfy the criteria for said first, second, and thirdsubsets; (e) means, coupled to said indicating means, for classifyingeach of the codewords as a member of one of the first, second, or thirdsubsets; (f) means, coupled to said classifying means, for performing afirst level of decoding each of the codewords including obtaining fromone of three lookup tables in a first memory, the three tablescorresponding to the first, second, and third subsets, a plurality ofindex numbers uniquely corresponding to the computed t-sequences fromthe first computing means; (g) means for performing a second level ofdecoding the codewords including:(1) means for converting each saidindex number into a two-digit number in base 30, the first digit of saidtwo-digit number being a high value and the second digit being a lowvalue, (2) for each of the high values and the low values, (i) firstmeans for determining, from the state of a decoding-mode variable storedin a second memory, which of a plurality of decoding modes is acurrently active decoding mode, (ii) second means for determining, asymbol character associated with the high value or low value from alookup table in said second memory associated with the active mode, and(iii) means, coupled to said second determining means, for changing to aspecified new current decoding mode, and for changing the state of thedecoding-mode variable to correspond to the new decoding mode, if saidsymbol character is a shift character; and (h) means for generating asignal uniquely representing the codewords.
 21. An apparatus forgenerating a signal representative of information encoded in amachine-readable label, said machine-readable label including first,second, and third rows each comprising a plurality of codewords and atleast one control word, each said codeword representing at least oneinformation-bearing character and being selected from among first,second, and third subsets of detectable mark/space patterns, each saidmark/space pattern comprising a fixed-width pattern of at least eightmarks and spaces of varying widths representing on states and offstates, each said mark and space having a width x_(i) of an integralmultiple of a basic width unit, each of said first, second, and thirdsubsets including only codewords X matching all of the followingcriteria:(i) a discriminator function f(X)=(x₁ -x₃ +x₅ -x₇) mod 9 ofeach codeword in the respective first, second and third subsets is equalto 0, 3, or 6, respectively, (ii) all t-sequences t_(i) =x_(i) +x_(i+1)of each codeword X are not greater than 9 basic width units, and (iii)each codeword X includes only marks and spaces whose widths are notgreater than 6 basic width units, each said row including a checksumcodeword representing a checksum function of the other codewords in therow, the checksum function being a function of unique respective valuesof each codeword in the row, the apparatus comprising:(a) means forscanning each of said mark/space patterns within said machine-readablelabel and for generating an electronic image of each of said scannedmark/space patterns; (b) first means for computing, for each of thescanned mark/space patterns, a t-sequence of N-1 digits whose i^(th)digit is t_(i), where N is the number of marks and spaces in each of thescanned mark/space patterns; (c) second means for computing thediscriminator function of each of the scanned mark/space patterns; (d)means, coupled to the first and second computing means, for indicatingthat any of the scanned mark/space patterns is not a codeword, if thecomputed t-sequence and the computed x-sequence fail to satisfy thecriteria for said first, second, and third subsets; (e) means, coupledto said indicating means, for classifying each of the codewords as amember of one of the first, second, or third subsets; (f) means, coupledto said classifying means, for performing a first level of decoding thecodewords including obtaining from one of three lookup tables in a firstmemory, the three tables corresponding to the first, second, and thirdsubsets, a plurality of initial index numbers uniquely corresponding tothe computed t-sequences from the first computing means; (g) means forstoring said initial index numbers for the codewords in a correspondingstorage location in an initial decoding array DA in a second memory; (h)third means for computing checksum functions of the codewordsrepresented in the initial decoding array DA if an initial index numberhas been stored in the initial decoding array DA for all codewords ineach of said rows; (i) second means for indicating an error if any ofthe computed checksum functions does not match the checksum codeword forthe respective row; (j) means for performing a second level of decodingthe codewords, if a computed checksum function does match the checksumcodeword for the row, including:(1) means for converting each saidinitial index number into a two-digit number in base 30, the first digitof said two-digit number being a high value and the second digit being alow value, (2) first means for determining, for each of the high valuesand the low values, from the state of a decoding-mode variable stored ina third memory, which of a plurality of decoding modes is a currentlyactive decoding mode, (3) second means for determining, for each of thehigh values and the low values, a symbol character associated with thehigh value or low value from a lookup table in said third memoryassociated with the active mode, and (4) means, coupled to said seconddetermining means, for changing, for each of the high values and lowvalues, to a specified new current decoding mode and changing the stateof the decoding-mode variable to correspond to the new decoding mode ifsaid symbol character is a shift character; and (k) means for generatinga signal uniquely representing the codewords.
 22. The apparatus asclaimed in claim 21, further comprising:(m) means for determining aplurality of initial confidence level values corresponding to each ofsaid initial index numbers stored in the initial decoding array (DA) andfor storing the determined initial confidence level values in acorresponding initial confidence array (FA) in a second memory; (n)means for rescanning, redecoding, and redetermining a plurality ofupdated index numbers and corresponding updated confidence level values;(o) means for storing in an updated decoding array in said first memoryand in an updated confidence array in said second memory the respectiveupdated index numbers and updated confidence level values; (p) means foradding, for each said codeword, the initial and updated confidence levelvalues to obtain a final confidence level value, for storing the finalconfidence level value in a final confidence array, and for storing theinitial index number in a final decoding array, if the updated indexnumber equals the initial index number and the updated and initial indexnumbers each equal one of a plurality of known codewords; (q) means forstoring the initial index number in a final decoding array, forcomputing a final confidence value by subtracting the updated confidencevalue from the initial confidence value, and for storing the finalconfidence value in a final confidence array, if the initial confidencevalue is greater than the updated confidence value, and if, for eachsaid codeword, the updated index number does not equal the initialnumber value and the updated and initial index numbers each equal one ofsaid plurality of known codewords; (r) means for storing the updatedindex number in said final decoding array, for calculating the finalconfidence value by subtracting the initial confidence value from theupdated confidence value, and for storing the final confidence value insaid final confidence array, if the updated confidence value is greaterthan the initial confidence value, and if, for each said codeword, theupdated index number does not equal the initial number value and theupdated and initial index numbers each equal one of said plurality ofknown codewords; (s) means for storing a predetermined unknown indexnumber in said final decoding array, for setting the corresponding finalconfidence value to zero, and for storing the final confidence value insaid final confidence array, if the initial and updated confidencenumbers are equal, and if, for each said codeword, the updated indexnumber does not equal the initial number value and the updated andinitial index numbers each equal one of said plurality of knowncodewords; and (t) means for storing, for each said codeword, the knownindex number and the corresponding confidence value in said finaldecoding array and said final confidence array, respectively, if eitherthe initial index number or the updated index number equals thepredetermined unknown index number and the other index number equals oneof said plurality of known index numbers.
 23. An apparatus for scanningand decoding a series of patterns representative of information encodedin a machine-readable label, said machine-readable label includingfirst, second, and third rows each comprising a plurality of codewordsand at least one control word, each said codeword representing at leastone information-bearing character and being selected from among first,second, and third subsets of detectable mark/space patterns, each saidmark/space pattern comprising a fixed-width pattern of marks and spacesof varying widths representing on states and off states, each said markand space having a width x_(i) of an integral multiple of a basic widthunit, each of said first, second, and third subsets including onlycodewords X matching all of the following criteria:(i) a discriminatorfunction f(X)=(x₁ -x₃ +x₅ -x₇) mod 9 of each codeword in the respectivefirst, second and third subsets is equal to 0, 3, or 6, respectively,(ii) all t-functions t_(i) =x_(i) +x_(i+1) of each codeword X are notgreater than 9 basic width units, and (iii) each codeword X includesonly marks and spaces whose widths are not greater than 6 basic widthunits, each said row including row checksum a codeword representing achecksum function of the other codewords in the row, the checksumfunction being a function of unique respective values of each codewordin the row, the machine-readable label including a sequence of one ormore codewords representing a structure checksum for themachine-readable label, the apparatus comprising:(a) means for scanningeach of said mark/space patterns within said machine-readable label andfor generating an electronic image of each of said scanned mark/spacepatterns; (b) first means for computing, for each of the scannedmark/space patterns, a t-sequence of N-1 digits whose i^(th) digit ist₁, where N is the number of marks and spaces in each of the scannedmark/space patterns; (c) second means for computing the discriminatorfunction of each of the scanned mark/space patterns; and (d) means,coupled to the first and second computing means, for indicating thateach of the scanned mark/space patterns is not a codeword, if thecomputed t-sequence and the computed discriminator function fail tosatisfy the criteria for said first, second, and third subsets; (e)means, coupled to the indicating means, for classifying each of thecodewords as a member of one of the first, second, or third subsets, ifthe scanned mark/space pattern is a codeword; (f) means, coupled to saidclassifying means, for performing a first level of decoding thecodewords including obtaining from one of three lookup tables in a firstmemory, the three tables corresponding to the first, second, and thirdsubsets, a plurality of initial index numbers uniquely corresponding tothe computed t-sequences from the first computing means; (g) means forstoring each of said initial index numbers for each of the codewords ina corresponding storage location in an initial decoding array DA in asecond memory; (h) third means for computing an initial index number foreach codeword for which an initial index number has not been stored inthe initial decoding array DA; (i) fourth means for computing thechecksum function of the codewords represented in the decoding array DAfor any of said rows in which an initial index number has been stored inthe initial decoding array DA for all codewords in a row; and (j) secondmeans for indicating an error for any of said rows in which the computedchecksum function does not match the row checksum codeword.
 24. Theapparatus as set forth in claim 23 further comprising:(k) means forperforming a second level of decoding the codewords including:(1) meansfor converting each said initial index number into a two-digit number inbase 30, the first digit of said two-digit number being a high value andthe second digit being a low value, (2) first means for determining, foreach of the high values and the low values, from the state of adecoding-mode variable stored in a third memory, which of a plurality ofdecoding modes is a currently active decoding mode, (3) second means fordetermining, for each of the high values and the low values, a symbolcharacter associated with each high value and low value from a lookuptable in said third memory associated with the active mode, and (4)means, coupled to the second determining means, for changing, for eachof the high values and the low values, to a specified new currentdecoding mode and changing the state of the decoding-mode variable tocorrespond to the new decoding mode if said symbol character is a shiftcharacter; and (1) means for generating a signal uniquely representingthe codewords.
 25. The apparatus as claimed in claim 23 furthercomprising:(1) means for determining a plurality of initial confidencelevel values corresponding to each of said initial index numbers storedin the initial decoding array (DA) and for storing the determinedinitial confidence level values in a corresponding initial confidencearray (FA) in a second memory; (m) means for rescanning, redecoding, andredetermining a plurality of updated index numbers and correspondingupdated confidence level values; (n) means for storing in an updateddecoding array in said first memory and an updated confidence array insaid second memory the respective updated index numbers and updatedconfidence level values; (o) means for adding, for each said codeword,the initial and updated confidence level values to obtain a finalconfidence level value, for storing the final confidence level value ina final confidence array, and for storing the initial index number in afinal decoding array, if the updated index number equals the initialindex number and the updated and initial index numbers each equal one ofa plurality of known codewords; (p) means for storing the initial indexnumber in a final decoding array, for computing a final confidence valueby subtracting the updated confidence value from the initial confidencevalue, and for storing the final confidence value in a final confidencearray, if the initial confidence value is greater than the updatedconfidence value, and if, for each said codeword, the updated indexnumber does not equal the initial number value and the updated andinitial index numbers each equal one of said plurality of knowncodewords; (q) means for storing the updated index number in said finaldecoding array, for calculating the final confidence value bysubtracting the initial confidence value from the updated confidencevalue, and for storing the final confidence value in said finalconfidence array, if the updated confidence value is greater than theinitial confidence value, and if, for each said codeword, the updatedindex number does not equal the initial number value and the updated andinitial index numbers each equal one of said plurality of knowncodewords; (r) means for storing a predetermined unknown index number insaid final decoding array, for setting the corresponding finalconfidence value to zero, and for storing the final confidence value insaid final confidence array, if the initial and updated confidencenumbers are equal, and if, for each said codeword, the updated indexnumber does not equal the initial number value and the updated andinitial index numbers each equal one of said plurality of knowncodewords; and (s) means for storing, for each said codeword, the knownindex number and the corresponding confidence value in said finaldecoding array and said final confidence array, respectively, if eitherthe initial index number or the updated index number equals thepredetermined unknown index number and the other index number equals oneof said plurality of known index numbers.
 26. The apparatus as claimedin claim 25 further comprising:(r) means for performing a second levelof decoding the scanned codewords including(1) means for converting eachsaid index number into a two-digit number in base 30, the first digit ofsaid two-digit number being a high value and the second digit being alow value, (2) first means for determining, for each of the high valuesand the low values, from the state of a decoding-mode variable stored ina third memory, which of a plurality of decoding modes is a currentlyactive decoding mode, (3) second means for determining, for each of thehigh values and the low values, a symbol character associated with eachhigh value and low value from a lookup table in said third memoryassociated with the active mode, and (4) means, coupled to the seconddetermining means, for changing, for each of the high values and the lowvalues, to a specified new current decoding mode and changing the stateof the decoding-mode variable to correspond to the new decoding mode ifsaid symbol character is a shift character; and (s) means for generatinga signal uniquely representing the scanned codewords.
 27. An apparatusfor generating a signal produced by scanning a machine-readable label,said machine readable label including a plurality of codewords organizedinto at least two adjacent rows, each said codeword representing atleast one human-recognizable symbol and no codeword in any one row beingidentical to any codeword in an adjacent row, the apparatuscomprising:(a) means for scanning said label to detect said codewords;(b) first decoding means for determining a detectable characteristic foreach said scanned codeword; (c) second decoding means for computing aunique index number for each said scanned codeword as a function of saiddetectable characteristic; and (d) means for processing each of theindex numbers to generate a signal representative of said at least onehuman-recognizable symbol.
 28. The apparatus of claim 27, wherein thefirst decoding means for determining a detectable characteristic foreach said scanned codeword includes:means for computing a discriminatorfunction, no codeword in any one row having a discriminator functionidentical to that of a codeword in an adjacent row.
 29. The apparatus ofclaim 27, wherein each said codeword comprises a fixed width pattern ofat least eight marks and spaces of varying widths and each said mark andspace has a width x_(i) of an integral multiple of a basic width unit,the first decoding means for determining a detectable characteristic foreach said codeword including:means for computing a discriminatorfunction f(X)=(x₁ -x₃ +x₅ -x₇) mod 9 of each codeword.
 30. The apparatusof claim 27, wherein each said codeword comprises a fixed width patternof at least eight marks and spaces of varying widths and each said markand space has a width x_(i) of an integral multiple of a basic widthunit, the first decoding means for determining a detectablecharacteristic for each said scanned codeword including:(i) means forcomputing a discriminator function f(X)=(x₁ -x₃ +x₅ -x₇) mod 9 of thecodewords; and (ii) means for computing a t-sequence t_(k) =x_(k)+x_(k+1) for k having values from 1 to
 7. 31. The apparatus of claim 27,wherein the determining means represents a first decoding means and thecomputing means represents a second decoding means, and wherein themeans for processing each of the index numbers includes:second means fordetermining whether each said scanned codeword includes a representationof a mode-switching symbol, and means, coupled to the second determiningmeans, for switching from a first decoding mode to a second decodingmode, if a scanned codeword includes a representation of amode-switching symbol.
 32. An apparatus for storing and retrievinginformation by scanning indicia on the surface of a substrate, saidindicia including a plurality of codewords scanned sequentially andorganized into at least two adjacent rows, each codeword being either aninformation codeword or a control codeword, each information codewordbeing a representation of at least one information-containing datastructure, no codeword in any one row being identical to any codeword inan adjacent row, the apparatus comprising:(a) means for storinginformation including applying said indicia to said substrate; and (b)means for retrieving said information including:(1) means for scanningsaid indicia to detect said information and control codewords; (2) meansfor determining whether each of said scanned codewords is an informationcodeword or a control codeword, (3) means for providing a plurality ofdifferent protocols, each said protocol associating each said scannedcodeword with a corresponding said data structure, only one protocolbeing active at any given time; (4) means, coupled to the determiningmeans, for decoding and outputting each of said scanned informationcodewords according to the active protocol, and (5) means, coupled tothe determining means, for processing each of said scanned controlcodewords to decode a symbol representative of a new protocol, and forchanging the active protocol to the new protocol.
 33. A method ofreading a machine-readable symbol, the symbol, including a plurality ofindividual codewords and at least one control word, each codeword andcontrol word having a detectable mark/space pattern, the codewords, whentaken in sequence, together defining an encoded version of data to bedecoded, the mark/space pattern of each codeword having a detectablecharacteristic representative of information relating to a position ofeach said codeword within said sequence, the method comprising thesteps, executed using a machine, of:(a) scanning and reading thecodewords; (b) calculating, for each codeword X, a value of adiscriminator function f(X) dependent upon the detectablecharacteristic; (c) determining the position in said sequence of eachcodeword X as a function of the order in which each codeword X has beenread and as a function of the corresponding value of said discriminatorfunction f(X); and (d) decoding, as a function of said determinedposition, the codewords and outputting a decoded version of said data.34. The method as claimed in claim 33 wherein the decoding step includesthe substep of storing the decoded data.
 35. The method as claimed inclaim 33 wherein the codewords are arranged in a plurality of subsetregions within the symbol, the subset region into which each codeword Xlies depending upon the corresponding value of said discriminatorfunction f(X).
 36. The method as claimed in claim 33 wherein thecodewords are arranged in a plurality of subset regions within thesymbol and said discriminator function f(X) may take a plurality ofdiscrete values, the subset region into which each codeword X fallsbeing uniquely determined by the corresponding value of saiddiscriminator function f(X).
 37. The method as claimed in claim 36wherein the mark/space patterns within any given subset region areapproximately equidistant in terms of error distance from the mark/spacepatterns within any other subset region.
 38. The method as claimed inclaim 33 wherein the codewords are arranged in a plurality of rowswithin the symbol, the row in which each codeword X lies being at leastpartially determined by the corresponding value of said discriminatorfunction f(X).
 39. The method as claimed in claim 38 wherein the step ofscanning and reading the codewords includes the substeps of scanningsaid codewords substantially row-wise, and assigning the codewords X_(i)(i=1, 2 . . . ) to a common row so long as the value of f(X_(i)) remainsconstant.
 40. The method as claimed in claim 39 wherein a first rowcomprises codewords having values of f(X_(i)) that are mutuallyexclusive of values of f(X_(i)) for codewords lying in a second adjacentrow.
 41. The method as claimed in claim 40 wherein a third row comprisescodewords having values of f(X_(i)) that are mutually exclusive ofvalues of f(X_(i)) for codewords lying in said first row and said secondrow, said third row being adjacent to said second row.
 42. The method asclaimed in claim 38 wherein said machine-readable symbol includes asymbol checksum codeword and each said row of said machine-readablesymbol includes a row checksum codeword, the method further comprisingthe steps of:(e) computing a checksum for each said row; and (f) foreach said row, determining that an error has occurred if said calculatedchecksum does not match a checksum provided by the corresponding rowchecksum codeword.
 43. The method as claimed in claim 42 wherein thestep of scanning and reading includes the substep ofscanning each saidrow to determine whether a scanned mark/space pattern is a codeword, andwherein the step of decoding the codewords includes, for each said row,the following substeps:(1) determining, where possible, an index numbercorresponding to each said codeword; (2) storing the respective indexnumbers in a decoding array (DA) in a memory; and (3) repeating substeps(1) and (2) until an index number has been stored in said decoding array(DA) for (i) the row checksum codeword for the row, and (ii) all but oneof the codewords in the row, the method further comprising the step of:(g) reconstructing the missing one codeword using the row checksumcodeword.
 44. The method as claimed in claim 42 wherein the step ofscanning and reading includes scanning each said row to determinewhether a scanned mark/space pattern is a codeword, and wherein the stepof decoding the determined codewords further includes the followingsubsteps:determining, where possible, an initial index numbercorresponding to each said codeword; storing the respective initialindex numbers in an initial decoding array (DA) in a first memory; andrepeating the determining and storing substeps for each row and for allrows until an initial index number has been stored in the initialdecoding array (DA) for: (i) said symbol checksum codeword, (ii) all buttwo of the codewords in the symbol, and (iii) the row checksum codewordsfor each row having the missing codewords, the method further comprisingthe step of:(g) reconstructing the missing codewords using said rowchecksum codewords and said symbol checksum codeword.
 45. The method asclaimed in claim 44 further comprising the steps of:(h) determining aplurality of initial confidence level values corresponding to each ofsaid initial index numbers stored in the initial decoding array (DA) andstoring the determined initial confidence level values in acorresponding initial confidence array (FA) in a second memory; (i)rescanning, redecoding, and redetermining a plurality of updated indexnumbers and corresponding updated confidence level values; (j) storingin an updated decoding array in said first memory said updated indexnumbers and storing in an updated confidence array in said second memorythe updated confidence level values; (k) if, for each said codeword, theupdated index number equals the initial index number and the updated andinitial index numbers each represent one of a plurality of knowncodewords, then (i) adding the corresponding initial confidence levelvalue to the corresponding updated confidence level value to obtain afinal confidence level value, (ii) storing the final confidence levelvalue in a final confidence array, and (iii) storing the initial indexnumber in a final decoding array; (1) if, for each said codeword, theupdated index number does not equal the initial index number and theupdated and initial index numbers each represent one of said pluralityof known codewords, then(1) if the corresponding initial confidencevalue is greater than the updated confidence value, then storing theinitial index number in said final decoding array, calculating acorresponding final confidence value by subtracting the updatedconfidence value from the initial confidence value, and storing thefinal confidence value in said final confidence array, (2) if thecorresponding updated confidence value is greater than the initialconfidence value, then storing the updated index number in said finaldecoding array, calculating the corresponding final confidence value bysubtracting the initial confidence value from the updated confidencevalue, and storing the final confidence value in said final confidencearray, and (3) if the corresponding initial and updated confidencevalues are equal, then storing a predetermined unknown index number insaid final decoding array, setting the corresponding final confidencevalue to zero, and storing the final confidence value in said finalconfidence array; and (m) if, for each said codeword, either the initialindex number or the updated index number represents the predeterminedunknown index number and the other index number represents one of saidplurality of known index numbers, then storing the known index numberand the corresponding confidence value in said final decoding array andsaid final confidence array, respectively.
 46. The method as claimed inclaim 33 wherein each said mark/space pattern comprises a fixed widthpattern of marks and spaces.
 47. The method as claimed in claim 46wherein said discriminator function f(X) is a function of the widths ofthe individual marks making up each codeword X.
 48. The method asclaimed in claim 47 wherein each said mark/space pattern has four marks,and wherein:

    f(X)=(x.sub.1 -x.sub.3 +x.sub.5 -x.sub.7) mod 9

where: x_(i) =width of 1st mark x₃ =width of 2nd mark x₅ =width of 3rdmark x₇ =width of 4th mark.
 49. The method as claimed in claim 48wherein the decoding step includes the substep of determining a scannedmark/space pattern is not a codeword if f(X) does not equal 0, 3 or 6.50. The method as claimed in claim 46 wherein said discriminatorfunction f(X) is a function of the widths of the individual spacesmaking up each codeword X.
 51. The method as claimed in claim 46 whereinsaid discriminator function f(X) is a function of the widths of theindividual marks and spaces making up each codeword X.
 52. The method asclaimed in claim 33 wherein each said mark/space pattern comprises afixed width pattern of marks and spaces, andwherein the decoding stepincludes the substep of determining a scanned mark/space pattern is nota codeword if at least one of the marks and spaces making up the patternis wider than a specified width limit.
 53. The method as claimed inclaim 52 wherein the total width of a valid codeword is 17 basic widthunits, and the specified width limit is 6 basic width units.
 54. Themethod as claimed in claim 33 wherein each said mark/space patterncomprises a fixed width pattern of marks and spaces, each said mark andspace being a measured distance from one another and having a leadingedge and a trailing edge, andwherein the decoding step includes thesubstep of determining a scanned mark/space pattern is not a codeword ifthe measured distance between the leading edge of any one of the marksand the leading edge of a following mark in said pattern, or the leadingedge of any one of the spaces and the leading edge of a following spacein said pattern, is greater than a specified width limit.
 55. The methodas claimed in claim 54 wherein the total width of a valid codeword is 17basic width units, and the specified width limit is 9 basic width units.56. The method as claimed in claim 33 wherein a scanned mark/spacepattern comprises a plurality of marks and spaces, andwherein thedecoding step includes the substep of determining each said scannedpattern is not a codeword if the scanned pattern does not compriseexactly a given number of marks and spaces.
 57. The method as claimed inclaim 56 wherein the total width of a valid codeword is 17 basic widthunits, said given number of marks and spaces being 4 marks and 4 spaces.58. A method of reading a machine-readable symbol, the symbol includinga plurality of individual codewords and at least one control word, eachcodeword and control word having a detectable mark/space pattern, thecodewords, when taken in sequence, together defining an encoded versionof data to be decoded, the mark/space pattern of each codeword having adetectable characteristic representative of information relating to aposition of each said codeword within said sequence, the methodcomprising the steps, executed using a machine, of:(a) scanning andreading the codewords; (b) calculating, for each codeword X, a value ofa discriminator function f(X) dependent upon the detectablecharacteristic; (c) calculating a t-sequence for each said codeword X,the t-sequence being defined as a sequence of N-1 digits whose i^(th)digit is t_(i), where N is the total number of marks and spaces in amark/space pattern, each mark and space being a measured distance fromone another and having a leading edge and a trailing edge, and t_(i)equals a measured distance between the leading edge of the i^(th) markand the leading edge of the following mark in a mark/space pattern, orthe leading edge of the i^(th) space and the leading edge of thefollowing space in a mark/space pattern; and (d) decoding each saidcodeword X as a function of the respective t-sequence and discriminatorfunction f(X) and outputting a decoded version of said data.
 59. Themethod as claimed in claim 58 wherein the decoding step includes thesubstep of performing a first level of decoding for each said codewordX, wherein an index number for each said codeword X is located in afirst lookup table in a first memory, each said index number, for agiven value of said discriminator function f(X), uniquely correspondingto the calculated t-sequence of the respective codeword X.
 60. Themethod as claimed in claim 59 wherein the decoding step includes thesubsteps of:converting each said index number into a respective highlevel value V_(H) and a respective low level value V_(L), each said highlevel value and low level value being defined as follows:

    V.sub.H =(index number) div m,

    V.sub.L =(index number) mod m; and

performing, for each said codeword X, a second level of decoding,wherein for each said codeword X two predetermined consecutive valuesare located in a second lookup table in a second memory at addressescorresponding to V_(H) and V_(L).
 61. The method as claimed in claim 60wherein m=30.
 62. The method as claimed in claim 59 further comprisingthe steps of:(e) maintaining in a second memory a plurality of lookuptables corresponding to a plurality of decoding modes; (f) maintaining adecoding-mode variable in a third memory representative of the decodingmode currently active; and (g) when the index value for any saidcodeword X, or the value of V_(H) or V_(L) of any said codeword X,corresponds to a control character specifying a new decoding mode,changing to said new decoding mode and storing in said third memory thedecoding-mode variable corresponding to said new decoding mode.
 63. Amethod of reading a machine-readable symbol, the symbol including aplurality of codewords organized into at least two adjacent rows, eachcodeword being a representation of an item of data, and no codeword inany one row being identical to any codeword in an adjacent row, themethod including the steps, executed using a machine, of:(a) scanningand reading said plurality of codewords within the symbol; (b)determining whether an individual scanned codeword lies in one said rowor in another adjacent row; (c) computing an index number for saidindividual scanned codeword as a function of a detectable characteristicof said codeword and as a function of the result of the determiningstep; and (d) processing the index number to generate a signalrepresentative of said data item.
 64. An apparatus for reading anddecoding a machine readable symbol, the symbol including a plurality ofindividual codewords having a position within the symbol, each codewordhaving a detectable mark/space pattern, said codewords, when taken insequence, defining an encoded version of data to be decoded, theapparatus comprising:(a) means for scanning and reading the codewords;(b) means for calculating, for each codeword X, a discriminator functionf(X); (c) means for determining the position of each codeword X in saidsequence as a function of the order in which each codeword X has beenread and as a function of the value of f(X); (d) means for decoding thecodewords to obtain a decoded version of said data; and (e) means foroutputting the decoded version of the data.
 65. The apparatus as claimedin claim 64, including means for storing said decoded version of saiddata.
 66. A robotic system for use in selectively moving an objecthaving a machine-readable symbol, said robotic system including aplurality of individual codewords and at least one control word, eachcodeword and control word having a detectable mark/space pattern, thecodewords, when taken in sequence, defining an encoded version of datato be decoded, the mark/space pattern of each codeword having adetectable characteristic representative of information relating to aposition of each said codeword within said sequence, said robotic systemcomprising:(a) first scanning means for scanning and reading thecodewords; (b) means for calculating, for each codeword X, a value of adiscriminator function f(X) dependent upon the detectablecharacteristic; (c) means for determining the position in said sequenceof each codeword X as a function of the order in which each codeword Xhas been read and as a function of the corresponding value of saiddiscriminator function f(X); (d) means for decoding the codewords as afunction of said determined position and for outputting a decodedversion of said data; (e) second scanning means for generating a signalas a function of the decoded version of said data; and (f) means formanipulating said object in response to said signal.
 67. An apparatusfor generating a signal representative of information encoded in amachine-readable symbol, the symbol including at least two adjacent rowsof codewords, each codeword representing an item of data and beingselected from a set of detectable mark/space patterns, each saidmark/space pattern having a determinable discriminator function, theapparatus comprising:(a) scanning means for scanning the codewordswithin the symbol; (b) means for computing the discriminator functionfor each of said scanned codewords; (c) means for determining, from thevalues of the computed discriminator functions corresponding to each ofsaid scanned codewords, the row of the symbol in which each of saidscanned codewords lies; (d) means for decoding said scanned codewords asa function of the determined row for each of said scanned codewords toobtain a plurality of corresponding symbolic values; and (e) means forgenerating a plurality of signals representative of said symbolicvalues.
 68. The apparatus as claimed in claim 67 having means forstoring a plurality of stored values representative of said symbolicvalues.
 69. Apparatus for retrieving information by scanning indicia onthe surface of a substrate, the indicia including a plurality ofcodewords organized into at least two adjacent rows, each codeword beingeither an information codeword or a control codeword, each informationcodeword being representative of at least one information-containingdata structure, and no codeword in any one row being identical to anycodeword in an adjacent row, the apparatus comprising:(a) scanning meansfor scanning said plurality of codewords within the indicia; (b) meansfor determining whether an individual scanned codeword is an informationcodeword or a control codeword; (c) means for storing a plurality ofdifferent protocols each associating a scanned information codeword witha corresponding data structure, only one protocol being active at anygiven time; (d) means, coupled to the determining means, for decodingsaid individual scanned codeword according to the currently activeprotocol, if the scanned codeword is an information codeword; and (e)means, coupled to the determining means, for processing said individualscanned codeword and, if said individual scanned codeword is a controlcodeword, for decoding a symbol representative of a new protocol and forchanging the currently active protocol to said new protocol.
 70. Amethod for storing and retrieving information by scanning indicia on thesurface of a substrate, said indicia including a plurality of codewordsscanned sequentially and organized into at least two adjacent rows, eachcodeword being either an information codeword or a control codeword,each information codeword being a representation of at least oneinformation-containing data structure, no codeword in any one row beingidentical to any codeword in an adjacent row, the method including thesteps of:(a) storing information by applying said indicia to saidsubstrate; and (b) retrieving said information, the retrieving stepincluding the substeps of:(1) scanning said indicia to detect saidinformation and control codewords, (2) determining whether each of saidscanned codewords is an information codeword or a control codeword, (3)providing a plurality of different protocols each associating eachcodeword with a corresponding data structure, only one protocol beingactive at any given time, (4) if any of said scanned codewords is aninformation codeword as determined in said determining step, thendecoding and outputting each of said scanned information codewordsaccording to the active protocol, and (5) if any of said scannedcodewords is a control codeword as determined in said determining step,then processing each of said scanned control codewords to decode asymbol representative of a new protocol, and changing the activeprotocol to the new protocol.